Какой способ удобнее - выполнять асинхронную функцию в бесконечном цикле с перерывом между каждым выполнением (Node.js / Vanilla JS) - PullRequest
0 голосов
/ 28 февраля 2019

Я написал какую-то асинхронную функцию, которая что-то делает, а потом ничего не возвращает.После того, как функция закончила свое выполнение, я хочу подождать несколько секунд, а затем повторить ту же процедуру.

Процесс выглядит следующим образом: 1. Выполнить функцию 2. Дождаться завершения выполнения 3. Подождите/ Задержитесь в течение некоторого интервала 4. Начните заново с шага 1

Бесконечный цикл выполнения функции, переведите в спящий режим и начните снова.

Теперь мой вопрос: какой из 2 приведенных ниже блоков кода большеподходит для использования:

Вариант 1:

const MEANING_OF_LIFE = 42;
const DELAY_IN_MILLISECONDS = 1000;


const whatsTheMeaningOfLife = async () => {
  console.log(MEANING_OF_LIFE);
}

const outter = fn => {

  inner = async fn => {
    await fn();
    setTimeout(() => outter(fn), DELAY_IN_MILLISECONDS);
  };

  inner(fn);
};

(() => {
  outter(whatsTheMeaningOfLife);
})();

Вариант 2:

const MEANING_OF_LIFE = 42;
const DELAY_IN_MILLISECONDS = 1000;


const whatsTheMeaningOfLife = () => {
  console.log(MEANING_OF_LIFE);
}

const sleep = () => {
  return new Promise((resolve, ) => {
    setTimeout(() => resolve(), DELAY_IN_MILLISECONDS);
  });
};

(async () => {
  while(true) {
    await whatsTheMeaningOfLife();
    await sleep();
  }
})();

1 Ответ

0 голосов
/ 28 февраля 2019

Вторая версия кажется короче, намного чище, понятнее, а также позволяет правильно обрабатывать ошибки.Однако я бы рекомендовал передать DELAY_IN_MILLISECONDS в качестве аргумента sleep, а не использовать глобальную константу.

...