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

Ato*_*nal 6 javascript async-await es6-promise

我有以下循环:

while (true) {
  await f();
  await g();
}
Run Code Online (Sandbox Code Playgroud)

其中fg定义如下:

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

async function g() {
    await Promise.all([SOME_REQUEST_G, sleep(5000)])
}
Run Code Online (Sandbox Code Playgroud)

sleep定义如下:

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
Run Code Online (Sandbox Code Playgroud)

我的意图是SOME_REQUEST_F每秒钟等待一次,SOME_REQUEST_G每五秒钟等待一次,因此将它们包装在f和中g

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

如何定义sleep(如果用于)g阻止它的重新执行g,而不阻止它的重新执行f?有没有更好的方法来做我想做的事?

Cer*_*nce 6

while而是使用两个循环:

(async () => {
  setTimeout(async () => {
    while (true) {
      await f();
    }
  });
  while (true) {
    await g();
  }
})();
Run Code Online (Sandbox Code Playgroud)

setTimeout有需要允许两个whiles到同时运行,这样一个初始化不从开始阻止其他。