프로미스가 생성된 시점에는 알려지지 않았을 수도 있는 값을 위한 대리자로, 비동기 연산이 종료된 이후에 결과 값과 실패 사유를 처리하기 위한 처리기이다.
프로미스를 사용하면 비동기 메서드에서 동기 메서드처럼 값을 반환할 수 있다.
순회 가능한 객체에 주어진 모든 프로미스가 이행한 후, 혹은 프로미스가 주어지지 않았을 때 이행하는 Promise를 반환한다.
순회 가능한 객체에 프로미스가 들어가도 되고 프로미스가 들어가도 된다.
const p = Promise.all([1, 2, 3]); // 모든 값이 즉시 이행됨
const p2 = Promise.all([1, 2, 3, Promise.resolve(444)]); // 444 포함, 모든 값이 이행됨
const p3 = Promise.all([1, 2, 3, Promise.reject(555)]); // 555로 거부됨
setTimeout(() => {
console.log(p); // fulfilled: [1, 2, 3]
console.log(p2); // fulfilled: [1, 2, 3, 444]
console.log(p3); // rejected: 555
});
하나라도 거부하면 Promise.all()은 즉시 거부한다.
var p1 = new Promise((resolve, reject) => {
setTimeout(() => resolve("하나"), 1000);
});
var p2 = new Promise((resolve, reject) => {
setTimeout(() => resolve("둘"), 2000);
});
var p3 = new Promise((resolve, reject) => {
reject(new Error("거부"));
});
Promise.all([p1, p2, p3, p4, p5])
.then((values) => {
console.log(values);
})
.catch((error) => {
console.log(error.message);
});
// "거부"
주어진 모든 프로미스를 이행하거나 거부한 후에 각 프로미스의 대한 결과를 나타내는 객체 배열을 반환한다.
Promise.all()을 사용하면 하나라도 거부 당했을 때 즉시 거부되지만
Promise.allSettedl()는 각 프로미스의 실행 결과를 보존하고 모든 프로미스를 실행한다.
각각의 프로미스 결과값을 보존한다.
const p1 = Promise.resolve(1)
const p2 = new Promise((resolve, reject) =>
setTimeout(reject, 100, 'a'),
);
Promise.allSetted([p1, p2]).then((results) => {
results.forEach((result) => console.log(result)
})
// "fulfilled"
// "rejected"