--- title: Promise.all() slug: Web/JavaScript/Reference/Global_Objects/Promise/all tags: - ECMAScript6 - JavaScript - Обещание - метод translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all ---
Метод Promise.all(iterable)
возвращает обещание, которое выполнится тогда, когда будут выполнены все обещания, переданные в виде перечисляемого аргумента, или отклонено любое из переданных обещаний.
Promise.all(iterable);
{{jsxref("Promise")}}, который будет выполнен когда будут выполнены все обещания, переданные в виде перечисляемого аргумента, или отклонён, если будет отклонено хоть одно из переданных обещаний.
Promise.all возвращает массив значений от всех обещаний, которые были ему переданы. Возвращаемый массив значений сохраняет порядок оригинального перечисляемого объекта, но не порядок выполнения обещаний. Если какой-либо элемент перечисляемого объекта не является обещанием, то он будет преобразован с помощью метода
{{jsxref("Promise.resolve")}}.
Если одно из переданных обещаний будет отклонено, Promise.all
будет немедленно отклонён со значением отклонённого обещания, не учитывая другие обещания, независимо выполнены они или нет. Если в качестве аргумента будет передан пустой массив, то Promise.all
будет выполнен немедленно.
Promise.all
Promise.all ждёт выполнения всех обещаний (или первого метода reject()
).
var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, "foo");
});
Promise.all([p1, p2, p3]).then(values => {
console.log(values);
});
//Выведет:
// [3, 1337, "foo"]
Promise.all
поведение немедленного отклоненияPromise.all
будет немедленно отклонён если одно из переданных обещаний будет отклонено: если у вас есть четыре обещания которые будут выполнены с задержкой и одно, которое будет отклонено немедленно - тогда Promise.all
будет немедленно отклонён.
var p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, "one");
});
var p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, "two");
});
var p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, "three");
});
var p4 = new Promise((resolve, reject) => {
setTimeout(resolve, 4000, "four");
});
var p5 = new Promise((resolve, reject) => {
// Это обещание прервёт Promise.all
reject("reject");
});
Promise.all([p1, p2, p3, p4, p5]).then(value => {
console.log(value);
}, reason => {
console.log(reason)
});
//Выведет:
//"reject"
Спецификация | Статус | Пояснение |
---|---|---|
{{SpecName('ESDraft', '#sec-promise.all', 'Promise.all')}} | {{Spec2('ESDraft')}} | |
{{SpecName('ES6', '#sec-promise.all', 'Promise.all')}} | {{Spec2('ES6')}} | Первоначальный вариант в стандарте ECMA. |
{{Compat("javascript.builtins.Promise.all")}}