2017-02-13 5 views
1

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

+0

Вы запрашиваете библиотеку обещаний? – evolutionxbox

+3

Это то, что '.then' для – Paul

+0

@evolutionxbox, если это путь: да – doberkofler

ответ

5

Чтобы последовательно выполнять множество функций, возвращающее обещание можно использовать Array.prototype.reduce:

let final = functions.reduce((prev, f) => prev.then(f), Promise.resolve()); 

«Исходный» аргумент Promise.resolve() есть семена цепи обещаний, так как в противном случае (если передается массив, содержащий только одна функция) callback .reduce никогда не вызывается.

1

Большая часть этой функциональности уже существует (или будет существовать) на языке:

  • Выполнить кучу действий одновременно и получить обещание для массива результатов: Promise.all()
  • Выполнить кучу действий и получите обещание для первого, которое разрешает/отклоняет: Promise.race()
  • Запускайте кучу обещаний серийно: используйте reduce(), как и в другом ответе, или используйте протокол асинхронной итерации.
Смежные вопросы