현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.
Promise.all(iterable)
메소드는 반복가능한 변수(배열 등)에 포함된 모든 Promise들이 통과된 경우 결정(resolve)을 하고, 그렇지 못하고 거절(reject)하는 경우 거절하는 첫번째 Promise를 의 거절 원인으로 Promise를 반환합니다.
문법
Promise.all(iterable);
파라미터
설명
Promise.all 은 인자로 Promise 값들로 이루어진 배열을 받아 다시 결정(resolve)된 Promise값으로 이루어진 배열을 반환한다. 반환되는 배열에 담긴 값들의 순서는 Promise 연산이 일어나는 순서가 아닌 인자로 들어온 순서를 그대로 유지한다. 만약 인자로 넘어온 배열 내 값이 Promise가 아닌 경우 자동으로 Promise.resolve
값으로 계산된다.
만약 인자로 넘어온 배열 내 값 중 어느 하나라도 거절(reject)하는 경우, all
Promise는 그 즉시 배열 내 다른 모든 Promise를 버리고 문제가 되는 값과 함께 거절한다. 만약 인자로 비어있는 배열이 들어오는 경우 즉시 결정(resolve)한다.
예제
Promise.all
사용하기
Promise.all
w는 배열 내 모든 값이 결정(resolve)할 때까지 기다립니다.
var p1 = Promise.resolve(3); var p2 = 1337; var p3 = new Promise(function(resolve, reject) { setTimeout(resolve, 100, "foo"); }); Promise.all([p1, p2, p3]).then(function(values) { console.log(values); // [3, 1337, "foo"] });
Promise.all
실패-우선 연산
Promise.all
은 배열 내 요소 중 어느 하나라도 거절(reject)하면 즉시 거절합니다. 즉 Promise.all
은 빠르게 실패합니다: 만약 timeout 이후 결정(resolve)하는 4개의 Promise를 가지고 있고, 그 중 하나가 거절(reject)하면 Promise.all
은 즉시 거절합니다.
var p1 = new Promise(function(resolve, reject) { setTimeout(resolve, 1000, "one"); }); var p2 = new Promise(function(resolve, reject) { setTimeout(resolve, 2000, "two"); }); var p3 = new Promise(function(resolve, reject) { setTimeout(resolve, 3000, "three"); }); var p4 = new Promise(function(resolve, reject) { setTimeout(resolve, 4000, "four"); }); var p5 = new Promise(function(resolve, reject) { reject("reject"); }); Promise.all([p1, p2, p3, p4, p5]).then(function(value) { console.log(value); }, function(reason) { console.log(reason) }); //From console: //"reject"
명세
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Promise.all' in that specification. |
Standard | Initial definition in an ECMA standard. |
ECMAScript 2017 Draft (ECMA-262) The definition of 'Promise.all' in that specification. |
Draft |
브라우저 호환성
특징 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
기본 지원 | 32 | 29.0 (29.0) | No support | 19 | 7.1 |
특징 | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|
기본 지원 | No support | 29.0 (29.0) | No support | No support | 8 | 32 |