promise

lee jae hwan·2022년 8월 2일

javascript

목록 보기
80/107

비동기콜백사용시 발생하는 콜백지옥을 대체할 방법으로 promise객체가 도입되었다.

  1. 비동기작업에는 생산자와 작업결과를 기다리는 소비자가 있다.
  2. 생산자는 비동기작업을 관리할 Promise객체를 반환한다.
  3. promise는 비동기작업 완료후 소비자 핸들러를 호출한다.


let promise = new Promise(function(resolve, reject) {
   ....//생산자 비동기작업 수행코드
});

인자함수를 executer라고하며 promise객체생성시 자동으로 호출된다.

Promise객체 프로퍼티

state :

  • 객체생성(반환)시 초기값 pending로 설정
  • resolve(비동기작업완료시) fullfilled로 변경
  • reject시(비동기작업실패시) rejected로 변경

result :

  • 객체생성(반환)시 초기값 undefined로 설정
  • resolve(비동기작업완료시) 반환값으로 변경
  • reject(비동기작업실패시) Error객체로 변경

let promise = new Promise(function(resolve, reject) {
   ....//생산자 비동기작업 수행코드
});

resolve : 비동기작업이 완료됨을 알리는 콜백
reject : 비동기작업이 실패됨을 알리는 콜백

  1. 생산자는 비동기작업 시작과함께 Promise객체를 만들어 반환한다.

  2. promise state는 pending상태에서 fullfilled또는 rejected 로 변경될때까지 기다린다.

  3. 생산자는 비동기작업 결과에따라 resolve 또는 reject콜백을 호출한다.

  4. promise객체가 소비자 핸들러를 호출한다.



let promise = new Promise(function(resolve, reject) {
  setTimeout(() => resolve("완료"), 1000);
});

let promise = new Promise(function(resolve, reject) {
  setTimeout(() => reject(new Error("에러 발생!")), 1000);
});

pending상태에있던 promise state는 1초후에 fullfilled 또는 reject상태로 변경되고 promise는 소비자 핸들러를 호출한다.

promise.then(
  function(result) { /* fullfilled 핸들러 */ },
  function(error) { /* reject핸들러 */ }
).catch(alert);

then핸들러에서도 발생된 error객체를 처리할 수 있지만 catch핸들러에서 처리할 수 있다.


finally핸들러는 fullfilled, reject와 상관없이 수행되는 핸들러다.

promise.finally(() => 로딩 인디케이터 중지)
  .then(result => result와 err 보여줌 )

0개의 댓글