延迟的nodejs异步循环

时间:2018-12-23 15:13:17

标签: javascript node.js

当任务按计划花费更长的时间时,我试图使循环的延迟更长。

当前,我在循环中使用此代码:

async function doSomeStuff() {
    // do some stuff
    // sometimes this action may take longer than 5 seconds
    // after finishing wait 5 seconds
    console.log('task completed, waiting 5 seconds for next run...');
}

setInterval(doSomeStuff, 5000);

的工作原理很像,但即使任务按计划花费了更长的时间,延迟也固定为5秒,因此有时新循环在完成最后一个循环后仅1秒钟开始,而不是等待5秒钟。

不幸的是,我无法通过查看其他问题来解决它。

感谢您的帮助。

最好的问候 佩达(Paedda)

2 个答案:

答案 0 :(得分:3)

async函数不应与忽略返回的承诺(例如setInterval)的API一起使用,以防预期应链接承诺。

这可以通过递归async函数来完成:

(async function doSomeStuff() {
    await new Promise(resolve => setTimeout(resolve, 5000));
    // do some stuff
    await doSomeStuff();
})();

或无限循环:

(async function doSomeStuff() {
    while (true) {
        await new Promise(resolve => setTimeout(resolve, 5000));
        // do some stuff
    }
})();

如果需要处理错误,可以用try..catch包裹功能主体。

答案 1 :(得分:0)

你快到了

async function doSomeStuff() {
    // do some stuff
    // sometimes this action may take longer than 5 seconds
    // after finishing wait 5 seconds
    console.log('task completed, waiting 5 seconds for next run...');
    setTimeout(doSomeStuff, 5000);
}