每隔X秒执行异步javascript代码

时间:2017-09-18 08:22:23

标签: javascript node.js asynchronous repeat function-calls

如何每X秒执行一次异步js代码(用node.js编写),并确保在执行异步函数的回调(成功,错误)之前不会启动新的执行/调用。代码示例:

asyncFunc(function(successData){
  // do something with successData
}, function(errorData){
  // do something with errorData
});

setInterval首先出现在我的脑海中,但我认为它不能确保我想要的东西,如果回调没有在区间内执行,它将进入队列。

编辑:为了简化大小写,请在回调结束后重复执行1秒的异步函数。

2 个答案:

答案 0 :(得分:3)

您可以像这样使用setTimeout

(function loop() {
    asyncFunc(function(successData){
        setTimeout(loop, X);
    }, function(errorData){
        // If you still want to continue:
        setTimeout(loop, X);
    });
})(); // execute immediately

这将在异步调用触发回调时启动延迟。

答案 1 :(得分:1)

考虑使用可重用的方法来解决问题,该方法允许您指定要调用的函数,调用它的时间间隔以及要调用的回调:

function repeatAsync(func, interval, success, error) {
    (function loop() {
        func(
            () => {
                success();
                setTimeout(loop, interval);
            },
            () => {
                error();
                setTimeout(loop, interval);
            }
        );
    })();   // invoke immediately
}

如果您希望在出错时断开调用链,请将func的第二个参数替换为error,即func( () => { ... }, error)