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

How to call two async functions every `n` and `m` seconds within a `while (true)` loop?

我有以下循环:

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 到 运行,这样一个的初始化就不会阻止另一个的启动。