如何在while(true)循环中每隔n和m秒调用两个异步函数?

时间:2019-03-02 23:07:32

标签: javascript async-await es6-promise

我有以下循环:

while (true) {
  await f();
  await g();
}

其中fg的定义如下:

async function f() {
    await Promise.all([SOME_REQUEST_F, sleep(1000)])
}

async function g() {
    await Promise.all([SOME_REQUEST_G, sleep(5000)])
}

sleep的定义如下:

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

我的意图是让SOME_REQUEST_F每隔一秒等待一次,SOME_REQUEST_G每隔五秒等待一次,因此将它们包装在fg中。

但是,当前g阻止了循环中f的重新等待。

如何定义sleep,以便在g中使用它会阻止g的重新执行,而不会阻止f的重新执行?有没有更好的方法来做我想做的事?

1 个答案:

答案 0 :(得分:6)

改为使用两个while循环:

(async () => {
  setTimeout(async () => {
    while (true) {
      await f();
    }
  });
  while (true) {
    await g();
  }
})();

需要setTimeout允许两个while同时运行,以便一个初始化不会阻止另一个启动。

相关问题