Как вызывать две асинхронные функции каждые `n` и` m` секунды в цикле `while (true)`? - PullRequest
0 голосов
/ 03 марта 2019

У меня есть следующий цикл:

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

, где f и g определены следующим образом:

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 ожидал каждые пять секунд, следовательно, заключая их в f и g.

Однако, в настоящее время g блокирует повторное ожидание f в цикле.

Как определить sleep, так что при использовании в g он блокируетповторное исполнение g, но не то, что f?Есть ли лучший способ сделать то, что я хочу?

1 Ответ

0 голосов
/ 03 марта 2019

Вместо этого используйте два while цикла:

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

setTimeout необходимо для одновременной работы обоих while, чтобы инициализация одного не блокировала другойот начала.

...