@HepkaPlay
JavaScript Junior.

Как выполнять следующую функцию массива через некоторое время после предыдущей?

Есть Array с функциями:
[func1, func2, func3];
Как сделать чтобы каждая функция в Array.map(i => {}) запускалась через 2 секунды после предыдущей?
  • Вопрос задан
  • 70 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
[func1, func2, func3].map(
  (func, idx) => window.setTimeout(func, idx * 2000)
);
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Для реализации задуманного нужен момент окончания работы очередной функции – чтобы от него считать 2 секунды.

В вопросе не раскрыта природа функций в массиве: то ли они мгновенно отрабатывают, то ли занимают продолжительное время. Синхронные или асинхронные. Что эти функции возвращают: Promise, значение или ничего?

Можно обернуть каждую в Promise с таймаутом:
[func1, func2, func3]
  // обернуть каждую в Promise:
  .map((f) => () => new Promise((res, rej) => {
    f();
    setTimeout(res, 2000));
  })
  // и собрать цепочку из этих промисов:
  .reduce((acc, c) => acc.then(c()), Promise.resolve());


Если эти функции асинхронные, то заменить
-    f();
-    setTimeout(res, 2000));
+    f()
+    .then(() => setTimeout(res, 2000)));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@xenonhammer
async ()=> for await  (let func of array) {
    func && func()  
}

Функции должны возвращать промис, помимо прочего, иначе работать не будет.
А функционал с двумя секундами реализуйте через таймаут
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы