많은 사람들이 Promise를 '콜백의 진화'로 오해하고 있지만, 실제로 Promise는 그렇지 않다.
Promise의 가장 큰 장점은 콜백과는 다르게 '결과값을 나중에 활용할 수 있다는 점'이다. Promise가 없었다면, 다음과 같은 방식으로 '1초 뒤에 무조건 실행되는' 콜백 함수만을 사용해야 했을 것이다.
setTimeout(() => {}, 1000);
하지만 Promise를 사용하면 비동기적인 값을 '필요한 시점에' 활용할 수 있다.
const promise = new Promise((resolve, reject) => {
setTimeout((결괏값) => {
resolve();
}, 1000);
});
다른일();
다른일();
다른일();
다른일();
promise.then(() => { // resolve로 반환된 결괏값을 내가 원할 때 자유롭게 사용할 수 있다.
console.log("");
});
Async와 Await는 Promise의 단점을 보완하기 위해 등장한 개념이다. 그래서인지 모든 경우에 Async와 Await가 Promise보다 우월하다고 생각하는 경우가 있다. 하지만 Async와 Await조차도 '필요한 시점에 값을 활용 가능'한 Promise의 장점에는 미치지 못한다.
const p1 = axios.get("서버주소1");
const p2 = axios.get("서버주소2");
const p3 = axios.get("서버주소3");
const p4 = axios.get("서버주소4");
const p5 = axios.get("서버주소5");
const p6 = axios.get("서버주소6");
Promise.all([p1, p2, p3, p4, p5, p6]).then((result)=>());
위 코드를 완전히 await으로 대체한다면, 코드가 더 복잡해질 수 있다. (실패 시 catch로 처리해야 하는 문제는 Promise.allSettled()로 해결 가능하다.)
나는 무심코 'Promise = callBack Hell의 해결책'이 가장 큰 장점이라고 생각했는데,
지금 생각해보면 Promise의 가장 큰 장점은 'callBack의 결괏값을 바로 사용해야 한다는 단점에 대한 해결책' 일 수 있겠다.
즐겁게 읽었습니다. 유용한 정보 감사합니다.