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

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

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

Бесконечный цикл выполнения функции, сон и начало заново.

Теперь мой вопрос заключается в том, какой из двух блоков кода ниже более подходит для использования:

Опция 1:

const MEANING_OF_LIFE = 42;
const DELAY_IN_MILLISECONDS = 1000;


const whatsTheMeaningOfLife = async () => {
  console.info(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.info(MEANING_OF_LIFE);
}

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

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

Этот inner кажется не нужным, он такой же, как outer.

Bergi 28.02.2019 16:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме