如何每X秒执行一次异步js代码(用node.js编写),并确保在执行异步函数的回调(成功,错误)之前不会启动新的执行/调用。代码示例:
asyncFunc(function(successData){
// do something with successData
}, function(errorData){
// do something with errorData
});
setInterval首先出现在我的脑海中,但我认为它不能确保我想要的东西,如果回调没有在区间内执行,它将进入队列。
编辑:为了简化大小写,请在回调结束后重复执行1秒的异步函数。
答案 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)