자바스크립트 내장객체 - Promise

정승옥(seungok)·2021년 3월 14일
0
post-thumbnail

1. Promise 객체

  • 비동기 처리를 위해 사용하는 자바스크립트 내장 객체이다.
  • 객체로써 언젠가 완료될 일을 나타낸다.
  • 완료되면 정상적인 값 또는 실패의 이유를 반환한다.

1-1. Promise 상태

  • 대기중_Pending
    👌 결과가 없는 상태를 말한다.
    👌 약속은 했지만 아직 약속에 대한 결과가 나오지 않은 상태이다.
  • 이행됨_Fullfilled
    ✅ 비동기 처리가 성공적으로 완료되어 약속을 이행한 상태를 말한다.
    ✅ 결과로 하나의 값이 전달된다.
  • 거부됨_Rejected
    ⛔️ 비동기 처리가 실패한 상태를 말한다.
    ⛔️ 약속이 거부되고 결과로 거절된 이유를 전달한다.

1-2. Promise 메소드

  • then(onFullfilled , onReject)
    👉 약속이 완료됐을 때 호출될 함수를 정의한다.
    👉 첫번째 인자로 약속이 성공적으로 이행됐을 때 호출될 함수를 전달한다.
    👉 두번째 인자로 거부됐을 때 호출될 함수를 전달한다.
    👉 두 함수 모두 매개변수를 통해 결과가 전달된다.
  • cath(onReject)
    👉 약속이 거부됐을 때 호출될 함수를 등록한다.

1-3. 코드 실행 예시

  • Promsie 객체 생성함수 정의
    • 생성함수의 매개변수 answerPromise 에 대한 성공, 실패를 결정한다.
    • Promise 는 매개변수로 resolvereject 를 가진다
    • resolve 는 약속을 성공시킬 수 있는 함수로 호출 시 결과를 인자로 전달한다.
    • reject 는 실패 처리를 위한 함수로 호출 시 실패 이유를 인자로 전달한다.
  • Promise 객체 생성 함수
    • promiseA 객체는 resolve 되어 '시청하겠습니다' 라는 결과값이 전달된다.
    • promiseB 객체는 reject 되어 '시간이 안돼요' 라는 거절의 이유가 전달된다.
    • catch 메소드에 reject 시 호출될 함수를 등록하는데 then 메소드의 두번째 인자로 reject 시 호출될 함수를 전달하면 먼저 호출되어 catch 메소드로 등록된 함수는 무시된다.

2. Async 함수

  • async 함수는 await 구문과 함께 비동기 작업을 제어한다.
  • await 키워드는 반드시 async 함수 안에서만 유효하다.
  • await 키워드가 있는 비동기 함수는 이벤트 루프를 통해 비동기로 작업을 처리한다.
  • async 함수는 이러한 비동기 작업이 완료될 때까지 일시 중지 상태로 비동기 작업의 해결을 기다린다.
  • 작업이 완료되면 async 함수가 다시 실행되고 함수 결과를 반환한다.

2-1. 코드 실행 예시

  • Promise 객체 생성 함수

    • setTimeout 함수로 2초 뒤에 로직 처리를 약속한다.
    • person 객체의 energy 속성을 기준으로 50을 넘으면 resolve 함수를 실행하고 그렇지 않으면 reject 함수를 실행한다.
  • async 함수 표현식으로 정의

    • 비동기 처리되는 doWork 함수를 연속으로 호출한다.
    • await 키워드를 추가하여 비동기 작업의 순서보장한다.
    • 정리, 청소 순서로 resolve 인자로 전달된 함수가 호출되다가 심부름에서 personA 객체의 energy속성의 값이 50보다 작아 reject 인자로 전달된 함수가 호출되어 error 를 반환한다.
profile
Front-End Developer 😁

0개의 댓글