如果我想使用setTimeout和delay = Math.random() * 1000
打印从1到10的数字。
由于异步编程和事件循环,答案将是随机数从1到10的数字。
我想要的是按与上述相同的延迟按递增顺序打印数字。这可以通过Promises或Async模块来完成。我的意思是说,它应该只打印一次数字1,然后再打印2,依此类推。
任何帮助,将不胜感激。
注意:请不要给出答案,例如增加时间到变量并将该变量用作延迟。
最佳答案
您可以使用Promises和async/await这样执行
// returns a promise that resolves after the specified number of ms
function delay(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
});
}
// function that will print the numbers in correct order, with delays
async function print(num) {
for (let i = 1; i <= num; i++) {
await delay(Math.random() * 1000); // wait
console.log(i); // print number
}
}
print(10); // actually execute function
实际打印数字的函数是
async
函数,它使用基于在指定的毫秒数后解析的承诺的延迟。关于javascript - 如何使用async或promises与setTimeout添加随机延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45010012/