我有一个函数tick
,我希望反复执行。每次tick
完成时,我都希望在3000
ms时间内再次触发它。如果tick
失败,我想暂停一个额外的1000
毫秒,然后再试一次。我无法使用setInterval
,因为我不知道tick
需要多长时间才能完成。
以下是我实现此目的的代码:
const loop = async () => {
try {
console.log('Starting operation... ');
await tick();
} catch (error) {
console.error(error);
await sleep(1000);
}
setTimeout(loop, 3000);
};
loop();
不幸的是,经过几天的操作后,这会停止工作。我认为我在堆栈上做错了。
在Node.js中运行这样的async
操作的推荐方法是什么?
答案 0 :(得分:1)
您的当前函数每3秒运行一次循环,无论它是否失败。
我重写了一下。这应该工作
const loop = async () => {
try {
console.log('Starting operation... ');
await tick();
setTimeout(loop, 3000);
} catch (error) {
console.error(error);
setTimeout(loop, 1000);
}
}
loop()
以上代码的顺序如下:
首先运行tick()
如果tick()成功,则在3秒内再次运行循环
如果tick()失败,请在1秒内再次运行循环