@raft88

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

Всем привет!
есть массив arr промисов, каждый обернут в функцию
каждый имеет вид (упрощенно)
function(result) {
    return new Promise((resolve)=>setTimeout(()=>resolve(result), 1000));
}


есть метод с кодом:
this.method = function () {
        let result = Promise.resolve(data);

        for (let func of this.arr) {
            result = result.then(func);
        }
    };

хотя сами промисы вызываются последовательно с нужной задержкой,
но данные, назовем data, никто дальше по цепочке не видит, как исправить?
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
  • rockon404
    @rockon404
    Frontend Developer
    Так:
    this.method = function () {  
      return this.arr.reduce((acc, fn) => acc.then(fn), Promise.resolve());
    }

    Функция вернет результат выполнения цепочного вызова.
    Демо: https://jsfiddle.net/t7199xrr/

    UPD ваш вариант тоже отлично работает.
    Видимо, у вас изначально проблема была в аргументах setTimeout.
    Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы