비동기 작업에서 가질 수 있는 3가지 형태
pending(대기상태) -> resolve됬다 fullfilled(성공), reject됬다 rejected(실패)상태
콜백함수를 활용한 예
function isPositive(number,resolve,reject) {
setTimeout(()=>{
if (typeof number === 'number') {
resolve(number>=0?'양수':'음수');
}else{
reject('주어진 값이 숫자형이 아닙니다');
}
},2000);
}
isPositive([10],
(res)=>{
console.log('성공적으로 수행됨',res);},
(err)=>{console.log('실패 하였음',err);});
promise 객체를 활용한 예
function isPositiveP(number) {
const excutor = (resolve,reject)=>{
setTimeout(()=>{
if (typeof number === 'number') {
console.log(number);
return resolve(number>=0?'양수':'음수');
}else{
return reject('주어진 값이 숫자형이 아닙니다');
}
},2000);
}
const asyncTask = new Promise(excutor);
return asyncTask;
}
const res = isPositiveP(1);
res.then((res)=>{console.log('작업성공',res);}).catch((err)=>{console.log('작업실패',err);});
res.catch((err)=>{
console.log('숫자형아님');
});
어떻게 하면 콜백 지옥에서 탈출 할까?
taskA(4,5,(a_res)=>{
console.log('A result:',a_res);
taskB(a_res,10,(b_res)=>{
console.log('B result',b_res);
taskC(b_res,(c_res)=>{
console.log('C result',c_res);
});
});
});
이렇게 ㅎㅎ
function taskA(a,b){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
const res = a + b;
resolve(res);
},3000);
});
}
function taskB(a,b){
const excutor = (resolve,reject)=>{
setTimeout(()=>{
const res = a * b;
resolve(res);
},1000);
}
return new Promise(excutor);
}
function taskC(a,){
return new Promise((resolve, reject)=>{
setTimeout(()=>{
const res = a * -1;
resolve(res);
},2000);
})
}
taskA(3,1).then((a_res)=>{
console.log('A result는 ',a_res);
return taskB(a_res,3);
}).then((b_res)=>{
console.log('B result는',b_res);
return taskC(b_res);
}).then((c_res)=>{
console.log('C result는',c_res);
});
taskA(3,1).then((a_res)=>{
console.log('A result는 ',a_res);
return taskB(a_res,3);
});
taskA(3,1).then((b_res)=>{
console.log('B result는',b_res);
return taskC(b_res);
}).then((c_res)=>{
console.log('C result는',c_res);
});