【发布时间】:2021-09-08 04:26:16
【问题描述】:
wait 函数用作睡眠函数,fn 函数接受一个数组(项目),它记录每个项目并在记录下一个项目之前休眠一秒钟。
const wait = async(time) => {
return new Promise((resolve) => setTimeout(resolve, time))
}
const fn = async(items) => {
for (item of items) {
await wait(1000)
console.log(item)
}
}
const exeAll = async() => {
Promise.all([
fn(['A1', 'A2']),
fn(['B1', 'B2']),
])
}
exeAll()
问题是exeAll 函数提供的打印结果:
B1
A2
B2
B2
但我认为它应该打印如下内容:
A1
B1
A2
B2
执行上述代码时,A1 根本不显示。谁能解释一下为什么?
【问题讨论】:
-
如果您在
Promise.all()调用中await调用fn(),它会完全按照您的预期工作。 -
并且 B2 最后总是记录两次。
-
exeAll不需要异步。 -
我不想
await他们,等待他们让他们按顺序执行。这将打印:A1 A2 B1 B2 -
我已经从 exeAll 函数中删除了
async关键字,但没有任何改变,问题始终存在。A1不打印,B2打印两次。
标签: javascript asynchronous async-await promise