ex)
'use strict';
//Promise is a JavaScript object for asynchronous operation.
//state: pending -> fulfilled(성공) or rejected(오류)
//Producer vs Consumer
//1.Producer
//when new Promise is created, the executor runs automatically. promise를 만드는 순간 실행됨
const promise = new Promise((resolve, reject)=>{
//doing some heavy work(network, read files)
console.log('doing something...');
setTimeout(()=>{
resolve('han');
//reject(new Error('no network'));
},2000);
});
//2. Consumers: then, catch, finally
promise
.then(value =>{ //promise가 정상적으로 될 경우 resolve의 파라미터가 value로 들어옴
console.log(value);
})
.catch(error => {//promise가 오류가 날경우 reject의 파라미터가 error 들어옴
console.log(error);
})
.finally(()=>{
console.log('finally');
});
ex)
//3. 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));
//4. 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(hen => getEgg(hen)) // .then(getEgg)
.catch(error => {
return '빵';
})
.then(egg => cook(egg))
.then(meal => console.log(meal)) // .then(console.log);
.catch(console.log);
ex)
class UserStorage{
loginUser(id, password){
return new Promise((resolve, reject)=>{
setTimeout(()=>{
if(
(id==='han'&&password==='dream')||
(id==='jin'&&password==='academy')
){
resolve(id);
}else{
reject(new Error('not found'));
}
},2000);
});
}
getRoles(user){
return new Promise((resolve, reject)=>{
setTimeout(()=>{
if(user==='han'){
resolve({name: 'han',role: 'admin'});
}else{
reject(new Error('no access'));
}
},1000);
});
}
}
const userStorage = new UserStorage();
const id = prompt('enter your id');
const password = prompt('enter your password');
userStorage
.loginUser(id,password)
.then(userStorage.getRoles)
.then(user => alert(`Hello ${user.name}, you have a ${user.role} role`))
.catch(console.log);
'인터넷강의 > 자바스크립트' 카테고리의 다른 글
자바스크립트 함수 기본 (0) | 2020.09.21 |
---|---|
비동기의 꽃 JavaScript async 와 await 그리고 유용한 Promise APIs (0) | 2020.09.21 |
비동기 처리의 시작 콜백 이해하기, 콜백 지옥 체험 (0) | 2020.09.16 |
JSON 개념 정리 와 활용방법 및 유용한 사이트 공유 (0) | 2020.09.16 |
유용한 10가지 배열 함수들. Array APIs 총정리 (0) | 2020.09.15 |