promiseAll — это собственная реализация встроенного Promise.all(). Она принимает массив промисов и возвращает один промис, который либо разрешается со всеми результатами в исходном порядке, либо отклоняется, как только любой промис завершится с ошибкой.
new Promise для обёртывания всей логикиresults хранит разрешённые значения, а счётчик completed отслеживает прогресс[]forEach, обёрнутый в Promise.resolve() для безопасной обработки не-промис значенийДля каждого промиса при успехе:
results[index] для сохранения исходного порядкаcompleted увеличивается — когда он совпадает с общим количеством, вызывается resolve(results)results[index] = value;
if (++completed === promises.length) resolve(results);
Если любой промис завершится с ошибкой, .catch(reject) сразу отклоняет внешний промис — это повторяет fail-fast поведение нативного Promise.all().
results[index] = value вместо results.push(value) гарантирует сохранение порядка, так как асинхронные операции могут завершиться в произвольном порядкеPromise.resolve() делает функцию безопасной для не-промис значенийВ пользовательской реализации promiseAll, использование results.push(value) вместо results[index] = value правильно сохранило бы порядок разрешённых значений, даже если промисы завершаются в другой последовательности.
Новый — ещё не проверен сообществом
Вы