MDN:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
callback을 대체하는 promise object
heavy/slow work를 모든 다른 일이 끝난 뒤에 수행하겠다고 promise 하는 것.
callback 함수를 사용하던 것을 Promise로 간단하게 처리 가능
function runInDelay(seconds) {
return new Promise((resolve, reject) => {
if(!seconds || seconds <0){
reject(new Error('seconds가 0보다 작음'));
}
setTimeout(resolve, seconds*1000);
});
}
runInDelay()
.then(() => console.log('타이머 완료!'))
.catch(console.error)
.finally(() => console.log('끝났다!'));
function runInDelay(callback, seconds) {
if(!callback) {
throw new Error('callback함수를 전달 해야 함');
}
if(!seconds || seconds < 0) {
throw new Error('seconds는 0보다 커야 함');
}
setTimeout(callback, seconds*1000);
}
try{
runInDelay(() => {
console.log('타이머 완료!');
}, 2);
} catch (error) {}
console.clear();
function fetchEgg(chicken){
return Promise.resolve(`${chicken} => 🐣`);
}
function fryEgg(egg){
return Promise.resolve(`${egg} => 🍥`);
}
function getChicken(){
return Promise.reject(new Error('치킨을 가지고 올 수 없음!'));
//return Promise.resolve(`🎍 =>🐓`);
}
getChicken()
.catch(() => '🐓') // 🐓 => 🐣 => 🍥
.then(fetchEgg)
.then(fryEgg)
.then(console.log); // 🎍 =>🐓 => 🐣 => 🍥
function getBanana() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('🍌');
}, 1000);
});
}
function getApple() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('🍎');
}, 3000);
});
}
function getOrange() {
return Promise.reject(new Error('no orange'));
}
// 바나나와 사과를 같이 가져오기
getBanana()//
.then(banana =>
getApple()//
.then((apple) => [banana, apple])
).then(console.log);
// Promise.all 병렬적으로 한번에 모든 Promise들을 실행!
Promise.all([getBanana(), getApple()]) //
.then((fruits) => console.log('all', fruits));
// Promise.race 주어진 Promise 중에 제일 빨리 수행되는 것이 이김!
Promise.race([getBanana(), getApple()]) //
.then(fruits => console.log('race', fruits));
Promise.all([getBanana(), getApple(), getOrange()]) //
.then((fruits) => console.log('all', fruits))
.catch(console.log); // Error: no orange
Promise.allSettled([getBanana(), getApple(), getOrange()]) //
.then((fruits) => console.log('all', fruits))
.catch(console.log); // { status: 'fulfilled', value: '🍌' }, { status: 'fulfilled', value: '🍎' }, {status: 'rejected', reason: Error: no orange at getOrange