采用以下循环:
for(var i=0; i<100; ++i){
let result = await some_slow_async_function();
do_something_with_result();
}
Does await
阻止循环?或者是i
继续递增,同时await
ing?
顺序是do_something_with_result()
保证顺序i
?还是取决于速度有多快await
ed 函数适用于每个i
?
- Does
await
阻止循环?或者是i
继续递增,同时await
ing?
“阻止”这个词不太恰当,但是,i等待时不会继续递增。相反,执行会跳回到async
函数被调用,提供一个 Promise 作为返回值,继续函数调用后的其余代码,直到代码堆栈被清空。然后,当等待结束时,函数的状态被恢复,并且在该函数内继续执行。每当该函数返回(完成)时,相应的承诺(之前返回的)就会得到解决。
- 顺序是
do_something_with_result()
保证顺序i
?还是取决于速度有多快await
ed 函数适用于每个i
?
订单有保证。下面的代码await
还保证仅在调用堆栈清空后执行,即至少在下一个微任务可以执行时或之后执行。
看看这段代码的输出如何。特别注意“调用测试后”的地方:
async function test() {
for (let i = 0; i < 2; i++) {
console.log('Before await for ', i);
let result = await Promise.resolve(i);
console.log('After await. Value is ', result);
}
}
test().then(_ => console.log('After test() resolved'));
console.log('After calling test');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)