for循环中的Discord.js setTimeout正在同时打印值,是否有任何方法可以使此简单程序正常工作

问题描述

我的代码是:

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));
}