비동기와 프라미스

Promise는 자바스크립트에서 브라우저에서 제공하는 비동기 함수인 Web APIs를 실행할 때 실행한 코드가 완료 될때까지 대기하지 않고 바로 다음 코드를 실행할 수 있도록 해주고, 비동기 함수의 실행이 완료되면 then()함수를 통해서 그 결과에 대한 코드를 실행할 수 있게 해줍니다.

  • Promise는 new 생성자 함수를 사용해서 생성합니다.

    const promise = new Promise((resolve, reject) => {
     if(/*처리 성공 */) {
    	resolve("결과 데이터");
     } else {
    	reject(new Error("에러"));
     }
    });
    
  • 요청에 대한 응답이 성공적으로 오면, resolve() 함수에 결과 전달
  • 실패하면 reject()함수에 에러 전달.

  • Promise 실행 함수가 가지고 있는 두 개의 파라미터 resolvereject 는 각각 무엇을 의미하나요?

    • resolve : 주어진 값으로 이행하는 새로운 프라미스 객체를 반환. 주어진 값이 then 메서드를 가지는 값인 경우 then메서드를 따라가서 최종상태를 결정.
    • reject : 주어진 이유로 거절하는 새로운 프라미스 객체를 반환.
  • resolve, reject함수에는 인자를 넘길 수 있습니다. 이때 넘기는 인자는 어떻게 사용할 수 있나요?
    • then(), catch(), finally()등 후속 처리 메서드를 통해 사용.
  • new Promise()를 통해 생성한 Promise 인스턴스에는 어떤 메서드가 존재하나요? 각각은 어떤 용도인가요?

    인스턴스 메서드

  • Promise.prototype.then 메서드는 무엇을 리턴하나요?
    • Promise를 리턴하고 Promise 성공 or 실패 각각의 콜백함수를 인자로 받는다.
  • Promise.prototype.catch 메서드는 무엇을 리턴하나요?

    returns a Promise and deals with rejected cases only

    (in fact, calling obj.catch(onRejected)  internally calls obj.then(undefined, onRejected)

  • Promise의 세 가지 상태는 각각 무엇이며, 어떤 의미를 가지나요?
    • Pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태
    • Fulfilled(이행) : 비동기 처리가 완료되어 프로미스 결과 값을 반환해준 상태
    • Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태
  • await 키워드 다음에 등장하는 함수 실행은 어떤 타입을 리턴할 경우에만 의미가 있나요?

    async  함수는 항상 promise를 반환합니다. 만약 async  함수의 반환값이 명시적으로 promise가 아니라면 암묵적으로 promise로 감싸집니다.

    예를 들어

    async function foo() {
      return 1;
    }
    

    위 코드는 아래와 같습니다.

    function foo() {
      return Promise.resolve(1);
    }
    
  • await 키워드를 사용할 경우, 어떤 값이 리턴되나요?

    • Promise, await 문은 Promise가 fulfill되거나 reject 될 때까지 async 함수의 실행을 일시 정지하고, Promise가 fulfill되면 async함수를 일시 정지한 부분부터 실행. 이때 await 문의 반환값은 Promise에서 fullfill된 값이 됩니다.
  • Promise.all 의 인자는 어떠한 형태인가요?

    • 배열 같은 순회 가능한 객체
  • Return value?
    • 매개변수가 비어 있으면 이미 이행(resolved)한 Promise
    • 객체에 프로미스가 없으면, 비동기적으로 이행하는 Promise . 예외: 이미 이행한 프로미스(구글크롬)
    • 다른 모든 경우에 pending 상태인 Promise
  • Promise.all 을 사용할 경우에 then 메서드의 파라미터는 어떠한 형태인가요?

    배열 형태로 각각의 프로미스를 받아옴.

  • Promise.all 에 두 개의 Promise 요청이 전달되고, 만일 그중 하나가 rejected 상태가 되는 경우, then 메서드를 따라가나요, 아니면 catch 메서드를 따라가나요?

    • catch 메서드를 따라간다. Promise.all은 fail - fast behavior 이란 특징을 가짐.
    • Promise.all  waits for all fulfillments (or the first rejection).

      reference


© 2021. All rights reserved.

----------Powered by Hydejack----------

woobaeh