res.then(()=>{성공한 경우 콜백함수}).catch(()=>{실패한 경우 콜백함수})
function isPositiveP(number) {
const executor = (resolve, reject) => {
setTimeout(() => {
if(typeof number === "number"){
resolve(number >=0 ? "양수":"음수");
}else{
reject("주어진 값이 숫자형 값이 아닙니다.");
}
},2000);
};
const asyncTask = new Promise(executor);
return asyncTask; //Promise를 반환
}
const res = isPositiveP(101);
//resolve, reject의 결과값을 사용 가능함
res
.then((res)=>{console.log("작업 성공:", res)})
.catch((err)=>{console.log("작업 실패:", err)})
//작업 성공: 양수
function taskA(a, b, cb) {
// 지역변수를 사용할 수 있도록 콜백함수 선언
setTimeout(() => {
const res = a + b;
cb(res); // 콜백함수 호출
}, 3000); // 3초 뒤에 콜백함수 수행
}
function taskB(a, cb) {
setTimeout(() => {
const res = a * 2;
cb(res); // 콜백함수 호출
}, 1000);
}
function taskC(a, cb) {
setTimeout(() => {
const res = a * -1;
cb(res); // 콜백함수 호출
}, 2000);
}
taskA(4, 5, (a_res) => {
console.log("A result: ", a_res);
taskB(a_res, (b_res) => {
console.log("B result: ", b_res);
taskC(b_res, (c_res) => {
console.log("C result: ", c_res);
});
});
});
console.log("코드 끝");
⇒ 가독성이 떨어지고 콜백이 깊어져 콜백 지옥이 발생한다.
function taskA(a, b) {
const executerA = (resolve, reject) => {
setTimeout(() => {
const res = a + b;
resolve(res);
}, 3000); // 3초 뒤에 수행
};
return new Promise(executerA);
}
function taskB(a) {
return new Promise((resolve, reject) => {
setTimeout(() => {
const res = a * 2;
resolve(res);
}, 1000);
});
}
function taskC(a) {
return new Promise((resolve, reject) => {
setTimeout(() => {
const res = a * -1;
resolve(res);
}, 2000);
});
}
taskA(5, 1) //taskA함수에서 반환하는 Promise 객체
.then((a_res) => {
console.log("A result: ", a_res);
//반환해줘야함
return taskB(a_res); // taskB를 호출하고 그 결과값을 반환
})
//taskB()의 리턴인 Promise객체의 then 함수
.then((b_res) => {
console.log("B result: ", b_res);
return taskC(b_res);
})
.then((c_res) => {
console.log("C result: ", c_res);
});
/** 함수를 부분분리 할 수도 있다. **/
// taskA 호출
const aPromise = taskA(5, 1).then((a_res) => {
console.log("A result: ", a_res);
return taskB(a_res); // taskB를 호출하고 그 결과값을 반환
});
//다른 작업
console.log("----");
console.log("----");
aPromise
.then((b_res) => {
console.log("B result: ", b_res);
return taskC(b_res);
})
.then((c_res) => {
console.log("C result: ", c_res);
});
//----
//----
//A result: 6
//B result: 12
//C result: -12
⇒ 콜백지옥 해결, 좀 더 가독성 좋고 깔끔한 코드 작성 가능