我已经浏览过该线程wait Promise.all() 和多个await 之间有什么区别? https://stackoverflow.com/questions/45285129/any-difference-between-await-promise-all-and-multiple-await,所以我很清楚 Promise.all 和多个等待。
不过,我对以下两种情况还不是很清楚。
为什么在情况 1 中它是顺序执行的(需要 10 秒),而在情况 2 中它是并行执行的(需要 4 秒)?
Case 1:
function promiseWait(time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(true);
}, time);
});
}
async function test1() {
var t0 = performance.now()
var a = await promiseWait(1000)
var b = await promiseWait(2000)
var c = await promiseWait(3000)
var d = await promiseWait(4000)
var t1 = performance.now()
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds."); //takes 10secs
}
test1()
Case 2:
function promiseWait(time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(true);
}, time);
});
}
async function test2() {
var t0 = performance.now()
const p1 = promiseWait(1000);
const p2 = promiseWait(2000);
const p3 = promiseWait(3000);
const p4 = promiseWait(4000);
const a = await p1;
const b = await p2;
const c = await p3;
const d = await p4;
var t1 = performance.now()
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.")
}
test2()
在第一种情况下,由于await
在每次调用之前promiseWait
,甚至开始执行下一个调用promiseWait
它需要等到第一次调用promiseWait
已经完全完成了。所以你会看到顺序执行。
在第二种情况下,您已经调用了all the promiseWait
在开始等待函数之前。所以promiseWait
已经开始执行了,那么你就在等待一个又一个的结果。
在第一个场景中明智地实施,下一次调用setTimeout
必须等到第一个setTimeout
过期。因此,第二个、第三个和第四个计时器需要等到第一个计时器到期并解决承诺才能被调度。
在几秒钟的情况下,您安排setTimeout
一个接一个地调用,所以计时器是全部已经排队。然后你就等待定时器到期,一一兑现你的承诺。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)