Nad*_*rsi 2 javascript synchronous settimeout
我需要一种简单的方法来等待 setTimeout 代码完成执行,然后运行 setTimeout 之后的代码。现在包含 setTimout 的循环之后的代码在 loop/setTimout 完成执行之前执行。
for(let i = 0; i < 5; i++) {
setTimeout(function(){
console.log(i);
}, i*1000);
}
console.log("loop/timeout is done executing");
Run Code Online (Sandbox Code Playgroud)
setTimeout顾名思义,不是同步的——无论你用什么来解决问题,都必须是异步的,没有办法解决这个问题。
实现这样的事情的最好方法是使用Promises 代替,调用Promise.all创建的承诺数组:
(async () => {
await Promise.all(Array.from(
{ length: 5 },
(_, i) => new Promise(res => setTimeout(() => {
console.log(i);
res();
}, i * 1000))
));
console.log("loop/timeout is done executing");
})();Run Code Online (Sandbox Code Playgroud)
尽管await正在等待 Promise,并且 Promise 不是同步的,但如果您希望代码看起来平坦,以便您可以将 finalconsole.log置于与主功能块相同的缩进级别,这可能是要走的路。
| 归档时间: |
|
| 查看次数: |
799 次 |
| 最近记录: |