当前位置: 代码迷 >> JavaScript >> 如何在`while(true)`循环中的每个`n`和`m`秒调用两个异步函数?
  详细解决方案

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

热度:16   发布时间:2023-06-05 15:51:11.0

我有以下循环:

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 有没有更好的方法来做我想要的?

改为使用两个while循环:

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

setTimeout存在是需要让双方while s到同时运行,这样一个初始化不从开始阻止其他。

  相关解决方案