Script

Promise 본문

Javascript

Promise

scripter. 2022. 6. 18. 15:50

Promise
Promise는 비동기 작업을 처리하기 위해

Javascript 안에 내장되어 있는 객체이다.

 

1.Promise의 state

promise의 상태는

pending(작업 수행중) =>

fulfilled(작업완료) or rejected(작업실패)로 나뉜다.

 

2.Producer vs Consumer

promise는 기능을 수행하여 해당 데이터를 만들어내는 Producer

그리고 그 데이터를 소비하는 Consumer로 나뉜다,

 

Producer

//새로운 Promise가 만들어지면,안에 있는 기능이 자동적으로 실행된다.
const promise = new Promise((resolve,reject)=>{
  //무거운 작업들(network,read file)등은 이렇게 프로미스로 처리하는게 좋다.
  //resolve-기능수행을 성공하면 나타낼 콜백함수
  //reject-기능수행을 실패할 경우 나타낼 콜백함수
console.log('doing something...');
setTimeout(()=>{
  resolve('ellie');
},2000);
});
//doing something... 출력 후 2초뒤 ellie 출력

Consumer

then,catch,finally로 나뉜다.

//1.Producer
const promise = new Promise((resolve,reject)=>{
console.log('doing something...');
setTimeout(()=>{
  //resolve('ellie');
  reject(new Error('no network'))//Error->Javascript 내장객체
},2000);
});

//2.Consumers: then,catch,finally
promise//promise chaining-consumers는 결국 producer에서 만들어진
       //하나의 promise를 가지고 계속해서 사용하는 것이므로 아래와 같이 연쇄적으로 사용가능하다.
.then(value=>{//then-성공했을 경우 resolve에서 값을 받아와서 그대로 호출하거나 변형시킨다
  console.log(value);
})
.catch(error =>{//catch-실패했을 경우 reject에서 값을 받아와서 그대로 호출하거나 변형시킨다
  console.log(error);
})
.finally(()=>{//finally-성공, 실패에 상관없이 무조건 맨마지막에 호출시킨다.
  console.log('finally');
});

 

3.Promise chaining

const fetchNumber = new Promise((resolve,reject)=>{
  setTimeout(()=>resolve(1),1000);
});

fetchNumber
.then(num =>num*2) //2
.then(num => num*3) //6
.then(num => {//then에는 값을 바로 전달해도 되고,Promise를 전달해도 된다
  return new Promise((resolve,reject) =>{
    setTimeout(()=>resolve(num-1),1000);
  }); //5
})
.then(num =>console.log(num)); //5

 

4.Error Handling

const getHen = () =>
  new Promise((resolve,reject)=>{
    setTimeout(()=>resolve('🐓'),1000);
  });
  const getEgg = hen =>
  new Promise((resolve,reject)=>{
    setTimeout(()=>reject(new Error(`${hen}=>🥚`)),1000);
  });
  const cook = egg=>
  new Promise((resolve,reject)=>{
    setTimeout(()=>resolve(`${egg}=>🍳`),1000);
  });
//🐓=>🥚=>🍳(error가 안났을시)

getHen()//
.then(getEgg)
.catch(error=>{
  return'🥖';
})//에러 발생시 대체할 것을 바로 다음줄에서 지정해줄 수 있다 🥖=>🍳
.then(cook)
.then(console.log)
.catch(console.log);

'Javascript' 카테고리의 다른 글

호이스팅과 스코프, TDZ  (0) 2022.07.18
async & await  (0) 2022.06.18
Callback  (0) 2022.06.17
JSON  (0) 2022.06.17
배열 api  (0) 2022.06.17
Comments