javascript로 외부 통신을 하다보면 callback 지옥이란 단어를 많이 들었을 것이다.
말그대로 무수한 callback으로인해 유지보수하기 어려운코드가 생성되어 지옥에 갇힌다는 것이다.
callback지옥을 개선할 수 있는 Promise 중에서도 Promise.all()을 알아보자.
단어의 뜻을 풀어보자면
Promise. + all() (이행한 약속을 전부 실행한다? 이정도로 해석이 된다.)
MDN예제를 보자.(https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)
Promise.all() 메서드는 순회 가능한 객체에 주어진 모든 프로미스가 이행한 후, 혹은 프로미스가 주어지지 않았을 때 이행하는 Promise를 반환합니다. 주어진 프로미스 중 하나가 거부하는 경우, 첫 번째로 거절한 프로미스의 이유를 사용해 자신도 거부합니다.
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
});
// expected output: Array [3, 42, "foo"]
> Array [3, 42, "foo"]
실행한 promise를 배열형태로 반환을 해준다.
Promise.all() 실패 우선성
Promise.all()은 배열 내 요소 중 어느 하나라도 거부하면 즉시 거부합니다. 예를 들어, 일정 시간이 지난 이후 이행하는 네 개의 프로미스와, 즉시 거부하는 하나의 프로미스를 전달한다면 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) => {
setTimeout(() => resolve('셋'), 3000);
});
var p4 = new Promise((resolve, reject) => {
setTimeout(() => resolve('넷'), 4000);
});
var p5 = new Promise((resolve, reject) => {
reject(new Error('거부'));
});
// .catch 사용:
Promise.all([p1, p2, p3, p4, p5])
.then(values => {
console.log(values);
})
.catch(error => {
console.log(error.message)
});
// 콘솔 출력값:
// "거부"
'Javascript > 문법' 카테고리의 다른 글
[javascript ES6] reduce(누산기) (0) | 2022.04.23 |
---|---|
[Javascript ES6] join (0) | 2022.04.02 |
[Javascript ES6] Map (2) | 2022.03.02 |
[Javascript ES6] (MAP, FILTER, FIND) 사용정리 (0) | 2022.01.31 |
[Javscript ES6] Spread Operator (스프레드 연산자) (0) | 2021.12.12 |