首页 > 解决方案 > 在循环内的函数调用之间添加延迟

问题描述

我有一个循环遍历数组。

我想调用一个函数,将数组的每个元素用作它的参数。

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而不是立即在循环中调用它?

我可能没有完美地提出这个问题,如果有什么不清楚的地方,请在评论中提问:)

标签: javascriptnode.js

解决方案


最简单的方法是使用 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();


推荐阅读