# All files / src/chap05 wrapPromise.js

0% Statements 0/12
0% Branches 0/4
0% Functions 0/4
0% Lines 0/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

     export default function wrapPromise(promise) {
      // Promise 상태 관리(pending, fullfilled, rejected)
      let status = 'pending';
      // Promise에서 받은 데이터
      let data;
      // 원래의 Promise에 후처리 부여
      let wrapper = promise.then(
        // 성공 시 status를 fulfilled(성공), data에 취득한 데이터를 설정한다.
        result => {
          status = 'fulfilled';
          data = result;
        },
        // 실패 시 status를 rejected(실패), data에 에러 오브젝트를 설정한다.
        e => {
          status = 'rejected';
          data = e;
        }
      );
      // 반환값은 Promise의 상태에 따라 값을 반환하는 get 메서드를 가진 객체다.
      return {
        get() {
          switch(status) {
            case 'fulfilled':
              return data;    // 성공 시 실제 데이터를 반환한다.
            case 'rejected':
              throw data;     // 실패 시 에러 발생
            case 'pending':
              throw wrapper;  // 완료하기 전에 Promise를 던져라.
            default:
              break;
          }
        }
      };
    }