[Javascript]Promise객체와 비동기처리

1. Promise 객체의 정의

Promise객체란 비동기 작업이 멎아헐 성공/실패에 대한 결과값을 의미한다.
-MDN-

생성된 작업에 대한 상태정보를 하기 3가지 유형으로 가지고 있는 객체이다

1)pending (대기): fulfilled / rejected 둘다 아닌 초기상태

2)fulfilled (이행): 연산 완료

3)rejected (거부) : 연산 실패

2. 왜 필요한지

Promise객체에 대해 찾아보면 비동기처리에 대해 먼저 확인하고 오라는 답변을 익숙하게 받았을 것이다. 이는 Promise객체의 Chaining이라는 강력한 기능때문이다.

1)비동기 처리란

  • CPU를 사용한 데이터 처리방식에 비해 하드디스크 읽쓰작업 & 네트워크를 통해 데이터 주고받는 작업(이하 'I/O작업'으로 통칭) 매우 느리다.

  • 이에 I/O작업이 다 될때까지 기다리는 것이 아니라, 요청만 해두고 다른 작업을 먼저 하는 것을 비동기처리라고 한다.

    2)그러면 Promise객체는 왜 필요한건지?

  • 비동기 작업들의 상태(pending/fulfulled/rejected)를 동기적으로 반환함으로써 필요한 동작을 실행할 수 있다.

  • Chaining : 비동기 처리들을 순차적으로 처리할 수 있다.

  • fetchthen의 사례를 들어 확인해보자 이 둘은 promise객체를 리턴하는 함수이다.

    fetch("주소") 
    .then((response) => response.text()) 
    .then(result=> {
      const users = JSON.parse(result);
      return users[0];
    });

    fetch를 실행하면 HTTP Response를 받아온다.
    이는 실제 JSON이 아니기떄문에, json()메서드를 사용해야한다.
    이 떄, fetch작업이 fulfilled되고난 이후 비로소 .json()메서드가 실행되도록 해야하는데
    이를 chaining이라고 한다.

    참고자료

  • Promise : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise

  • fetch : https://developer.mozilla.org/en-US/docs/Web/API/fetch

좋은 웹페이지 즐겨찾기