【问题标题】:How to call two async functions every `n` and `m` seconds within a `while (true)` loop?如何在`while(true)`循环中每隔`n`和`m`秒调用两个异步函数?
【发布时间】:2019-07-24 15:01:47
【问题描述】:

我有以下循环:

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的重新执行?有没有更好的方法来做我想做的事?

【问题讨论】:

    标签: javascript async-await es6-promise


    【解决方案1】:

    改用两个while 循环:

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

    setTimeout 需要允许两个whiles 并发运行,以便一个的初始化不会阻止另一个启动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-02
      • 2022-01-26
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多