javascript - 在循环内的函数调用之间添加延迟
问题描述
我有一个循环遍历数组。
我想调用一个函数,将数组的每个元素用作它的参数。
var arr = [1, 2, 3];
for (const a in arr) {
console.log('immediately logging for ', a)
setTimeout(() => {
// wait for 5 seconds before doing next console logging
function1(a)
}, 5000);
}
var function1 = (a) => {
console.log('after 5 seconds, logging for ', a)
}
为了增加延迟,我setTimeout
在每两次迭代之间使用。; 然而,恰恰相反的事情正在发生
如果我们运行此代码,所有即时日志控制台输出都会立即打印出来。5 秒后,所有日志记录一起发生。
如何完美地为每次迭代添加延迟function1
而不是立即在循环中调用它?
我可能没有完美地提出这个问题,如果有什么不清楚的地方,请在评论中提问:)
解决方案
最简单的方法是使用 async/await:
function sleep(ms) {
return new Promise((res, rej) => {
setTimeout(() => {
res();
}, ms);
});
}
async function main() {
const arr = [1, 2, 3];
for (const a of arr) {
console.log(a);
await sleep(1000);
}
}
main();
推荐阅读
- mysql - 更改 MySQL 的 SHOW COLUMS “额外”值
- sql - 将同一个表与自身连接时,DATEADD 是如何工作的?
- c# - 使用 PKCE 进行 OAuth 身份验证
- mysql - 我需要保留历史数据,以便用户可以在时间线之间导航
- javascript - 为什么这个导出的 Gridfs 函数不能正确执行?
- c# - Resources.load 带有可编写脚本的对象
- sql - Redshift 的月数保留队列计算问题
- html - 如何使用变量值作为 gsp 页面上 HTML 元素的 id?
- linux - 尝试同时测试大于和小于时出现太多参数错误
- javascript - 基于模板和用户输入以编程方式创建新的 HTML 页面