У меня есть массив объектов обещаний, которые должны быть разрешены в той же последовательности, в которой они перечислены в массиве, т.е. мы не можем пытаться разрешить элемент, пока не будет разрешен предыдущий (как метод Promise.all([...])
делает).
И если один элемент отклонен, мне нужно сразу отклонить цепочку, не пытаясь разрешить следующий элемент.
Как я могу реализовать это, или существует существующая реализация для такого шаблона sequence
?
function sequence(arr) {
return new Promise(function (resolve, reject) {
// try resolving all elements in 'arr',
// but strictly one after another;
});
}
РЕДАКТИРОВАТЬ
Первоначальные ответы предполагают, что мы можем только sequence
результаты таких элементов массива, а не их выполнение, потому что это предопределено в таком примере.
Но тогда как создать массив обещаний таким образом, чтобы избежать раннего выполнения?
Вот модифицированный пример:
function sequence(nextPromise) {
// while nextPromise() creates and returns another promise,
// continue resolving it;
}
Я бы не хотел делать это отдельным вопросом, потому что считаю, что это часть той же проблемы.
РЕШЕНИЕ
Некоторые ответы ниже и последующие обсуждения несколько сбились с пути, но возможное решение, которое сделало именно то, что я искал, было реализовано в библиотеке spex как последовательность методов. Метод может выполнять итерацию последовательности динамической длины и создавать обещания в соответствии с требованиями бизнес-логики вашего приложения.
Позже я превратил ее в общую библиотеку для всех желающих.