이로써 callback hell을 탈출 했지만then 지옥에 온것 같은 느낌은 나만 느끼는 것일까?
유용한 정적 함수들
then, catch, finally 이외에도 Promise에는 유용한 정적 함수들이 제공된다.
resolve()와 reject()
resolve와 reject는 각각 성공/실패 상태의 인스턴스를 반환한다. resolve의 파라미터는 then에 사용되는 call back의 파라미터가 되고 reject의 파라미터는 catch에 사용되는 call back의 파라미터가 된다.
// 반드시 성공하는 녀석 - catch 함수는 필요치 않다.
const resolvedPromise = Promise.resolve("success");
resolvedPromise.then((val) => {
console.log(`필승 ${val}`);
});
// 반드시 실패하는 녀석 - then 함수는 필요치 않다.
const rejected = Promise.reject("fail");
rejected.catch((val) => {
console.log(`필패 ${val}`);
});
all()
all은 파라미터로 Promise 객체를 저장한 배열 등 Iterable 타입을 받는데 이 모든 작업들이 성공하면 then으로 연결된다. 이때 각각의 Promise가 resolve에게 넘겨주는 값들은 Promise.all과 연결되는 then의 callback에 Iterable 타입으로 전달된다.
const waitMe = function (name) {
return new Promise((resolve, reject) => {
// something todo
const time = Math.random() * 2000;
setTimeout(() => {
console.log(`이름: ${name}, 대기시간: ${time}`);
resolve(name);
}, time);
});
};
// then 콜백 파라미터에는 각각의 promise들이 반환한 값들이 모여서 전달
Promise.all([waitMe("hong"), waitMe("jang"), waitMe("kim")]).then((names) => {
console.log(`모두 종료 : ${names}`);
});