问题描述
我的代码是:
for (let i = 0; i <= 5; i++) {
delay(i);
}
function delay(i) {
setTimeout(() => console.log(`${i} is the number`),2000);
}
2秒后我得到的输出是:
0是数字
1是数字
2是数字
3是数字
4是数字
5是数字
它们都在2秒后立即一起打印,而我希望它们在2秒后例如进行打印:
0是数字
(2秒后)
1是数字
(2秒后)
2是数字.....
有什么办法可以使它工作? 谢谢!!
解决方法
setTimeout
是一种非阻塞功能。 for
循环不等待delay
完成,而是直接连续连续六次调用delay(i)
。
要使此案例生效,您可以使用async/await
并承诺setTimeout
:
(async () => {
for (let i = 0; i <= 5; i++) {
await delay(i);
}
})();
function delay(i) {
return new Promise(resolve => setTimeout(() => {
console.log(`${i} is the number`);
resolve();
},2000));
}