Programming/javascript

[Promise] 비동기 처리

고양이의시간 2020. 6. 18. 23:08

Promise

비동기 처리를 도와주는 javascript 오브젝트. 콜백지옥 탈출을 도와준다.

RxSwift 의 Stream 처럼, 값의 흐름을 제어가 가능

 

State 

상태. 프로세스가 성공했는지, 실패했는지

pending(수행중) ------->  fulfilled(성공적으로 오퍼레이션 끝냄) /  rejeacted(네트워크에 문제가 생김)

 

프로듀서

정보제공

// 프로듀서 
const promise = new Promise((resolve, reject) => {
  // 비동기 처리 : 네트워크 처리, 파일읽기등 시간이 걸리는 작업
  console.log("resolve running....");

  setTimeout(() => {
  // resolve('success'); // 성공적으로 처리 완료시, resolve 콜백함수를 전달

  reject(new Error("no network")); // 실패시, reject 함수 전달
  }, 2000);
});

 

소비자

정보소비

      /**
       * 2.Consumers : then , catch, finally
       * promise 가 정상적으로 수행이 되고난 후, resolve 콜백함수로 전달한 값을 가져올 수 있다
      */
      promise
        .then(value => {
          // promise 수행이 성공했을때
          // 값 or promise전달 가능
          console.log(value);
        })
        .catch(error => {
          // promise 에서 실패했을때, 에러메시지 출력
          console.log(error);
        })
        .finally(() => {
          // 성공, 실패 모두 들어옴
          console.log("finally");
        });