Код в исполнителе обещаний (функция, которую вы передаете new Promise
) запускает синхронно . Итак, pushPromise(promise2)
уже запущен до того, как вы позвоните Promise.all
. Массив уже заполнен к тому времени, когда вы вызываете Promise.all
.
Могу ли я вставить новое обещание в массив в середине Promise.all ()?
Неесли вы хотите, чтобы Promise.all
увидел это обещание, нет. См. спецификация , Promise.all
циклически повторяет итеративную передачу, которую вы передаете синхронно, перед возвратом, и перед тем, как могут быть вызваны любые обработчики, которые она (Promise.all
) настраивает на посылы.
Вот пример, обратите внимание, что обещание от Promise.all
выполняется, а не отклоняется, хотя код добавляет обещание к массиву, который он отклоняет:
const promises = [
Promise.resolve(1),
Promise.resolve(2).finally(() => {
promises.push(Promise.reject(new Error("failed")));
}),
Promise.resolve(3),
];
Promise.all(promises)
.then(results => {
console.log(`results (${results.length}): ${results.join(", ")}`);
console.log(`promises.length: ${promises.length}`);
})
.catch(error => {
console.error(error);
});