在Node.js中执行重复的异步操作

时间:2018-04-23 09:27:02

标签: node.js async-await

我有一个函数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操作的推荐方法是什么?

1 个答案:

答案 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秒内再次运行循环