TIL Promise

백광호·2021년 2월 1일
0

TIL

목록 보기
41/55

새로 배운 것들

Promise

비동기 처리를 간편하게 할 수 있도록 도와주는 객체이다.
명령한 기능이 정상적으로 작동되면 해당 데이터를 넘겨주며
오류가 발생할 경우 해당 오류를 잡을 수 있도록 도와준다.

프로미스에는 3가지 상태가 존재한다.

  • Pending(대기)
    프로미스가 만들어져서 지정된 명령을 수행 중일 때에는
    대기 상태가 된다. (초기상태)
  • Fulfilled(이행)
    명령을 성공적으로 수행했을 때를 이행상태라고 한다.
  • Rejected(거부)
    명령을 제대로 수행하지 못하거나 오류가 발생했을 때를 거부상태라고 한다.

Promise의 내장 메소드(API)

const promise = new Promise(resolve, reject) => {
  console.log('doing something...')
    resolve('pangho')
    // reject(new Error('no network'));
}

new Promise()를 통해 생성한 promise인스턴스에는
다음과같은 메소드들이 들어있다.

  • all()

iterable한 요소를 받아 그 요소에
promise함수의 결과를 모두 받아 올때 까지 기다렸다가
값을 모두 받으면 출력한다.
이 때 프로미스중 하나라도 거부될 경우 에러를 반환한다

  • race()

가장 먼저(빨리) 처리된 프로미스의 결과(또는 에러)를 출력한다.
결과가 출력됐을때 다른 에러나 프로미스 함수의 결과는 무시됩니다.

  • resolve()

프로미스함수가 제대로 실행됐다면 그 결과(데이터)를 전달하는 함수

  • reject()

프로미스 함수가 실행 중에 어떤 문제가 발생했을 때 호출되는 함수
(프로미스 함수를 만든다)

Promise의 프로토타입 메소드

  • then()

프로미스 함수가 성공적으로 실행되면
그 실행값을 인자로 받아 다음 명령을 수행하는 메소드

여기서 주의할 점은 값을 바로 전달해도 되고
프로미스를 전달해도 된다.

  • catch()

프로미스 함수가 실패했을 경우 reject()에서 값을 받아와 출력하는 메소드 .then(null,f)와 값이 똑같다.

  • finally()

프로미스 함수의 성공 실패에 관계없이 제일 마지막에 호출되는 메소드
결과가 어떻든 마무리를 해야될 때 사용한다.

finally()는 프로미스 결과를 처리하기 위해 만들어 진 게 아니며
프로미스 결과는 finally를 통과해서 전달된다.
이런 특징은 아주 유용하게 사용되기도 한다.

async / await

프로미스를 좀더 편하게 작성할 수 있는 방법

async function f() {
  return 1;
}

함수 앞에 async를 붙여주면 async 함수가 된다
이 함수는 항상 프로미스를 반환하게 된다.

프로미스가 아닌 값을 반환하더라도
이행 상태의 프로미스(resolved promise)로 값을 감싸
이행된 프로미스가 반환되도록 한다.

let value = await promise;

awaitasync함수 내에서만 작동하는 키워드이다.

자바스크립트는 await 키워드를 만나면
프로미스가 처리될 때까지 함수 실행을 기다리게 만든다.
프로미스가 처리되면 그 결과와 함께 실행이 재개된다.

처리되길 기다리는 동안엔 엔진이 다른 일
(다른 스크립트를 실행, 이벤트 처리 등)을 할 수 있기 때문에,
CPU 리소스가 낭비되지 않는다.

profile
안녕하세요

0개의 댓글