Я написал какую-то асинхронную функцию, которая что-то делает, а потом ничего не возвращает. После того, как функция завершила свое выполнение, я хочу подождать несколько секунд, а затем повторить ту же процедуру.
Поток выглядит следующим образом: 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();
}
})();



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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