Producer
when new Promise is created, the executor runs automatically
const promise = new Promise((resolve, reject) ⇒ {
console.log('doing something...');
setTimeout(() => {
//resolve('ellie');
reject(new Error('no network'))
}, 2000);
});
Consumers: then, catch, finally
promise
.then((value) => {
console.log(value);
})
.catch(error => {
console.log(error);
})
.finally(() => {
console.log('finally')
});
Promise chaining
const fetchNumber = new Promise((resolve, reject) => {
setTimeout(()=> resolve(1), 1000);
});
fetchNumber
.then(num => num * 2)
.then(num => num * 3)
.then(num => {
return new Promise((resolve, reject) => {
setTimeout(()=> resolve(num -1), 1000);
});
})
.then(num => console.log(num));
Error Handling
const getHen = () =>
new Promise((resolve, reject) => {
setTimeout(() => resolve('닭'),1000);
});
const getEgg = hen =>
new Promise((resolve, reject) => {
//setTimeout(() => resolve(`${hen} => 계란`), 1000);
setTimeout(() => reject(new Error(`error! ${hen} => 계란`)), 1000);
});
const cook = egg =>
new Promise((resolve, reject) => {
setTimeout(() => resolve(`${egg} => 후라이`), 1000);
});
getHen()
.then(getEgg) //이렇게로도 가능 아래와 같음
.catch(error => {
return '빵';
})
.then(egg => cook(egg))
.then(meal => console.log(meal));
.catch(console.log);
getHen().then(getEgg).then(cook).then(console.log);