async / await 질문이요!

조회수 519회

const makeRequest = async () => {
  const value1 = await promise1();
  const value2 = await promise2(value1);
};

makeRequest();

// do other works

초보적인 질문일 것 같지만 궁금해서 이렇게 글을 남깁니다!

Promise에 대해서 async로 선언된 함수 내에서 중간값을 바로 활용할 수 있도록 2개의 promise에 대해서 await를 각각 이용했다고 하면

value1의 값이 받아지고난 다음 value2의 값이 받아지잖아요? (then 처럼) 그러면 결국 Code 뿐만 아니라 과정 자체도 Synchronous 해지는 것 아닌가요?

아니면 저렇게 then으로 promise를 걸어두고 저 함수는 빠르게 읽고 또 다른 작업으로 넘어가나요? 다른 작업을하면서 promise의 과정도 동시에 처리하는 것인가요?

감사합니다!

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 해당 코드를 callback 으로 생각해보면 이해가 쉽습니다. promise2 는 promise1 의 callback 에서 실행되는 것이기 때문에 결국 promise1 이 실행후 실행되게 됩니다. 그런면에선 sync합니다. 즉 실행순서가 보장됩니다. 정영훈 2020.8.3 01:33

1 답변

  • 함수 내부에서는 실행 순서가 보장되는 것은 맞지만, await은 async 함수 내에서만 가능하기 때문에 코드가 동기식으로 변하는것은 아닙니다.

    아래 예시를 보시면 makeRequest 함수에서 바로 리턴하는 값의 경우 비동기가 해결되지 않아 pending 상태의 Promise가 반환되며, 비동기로 접근해야만 값을 사용할 수 있습니다.

    const makeRequest = async () => {
      const value1 = await new Promise((resolve) => resolve(2));
      const value2 = await new Promise((resolve) => resolve(value1 * value1));
      return { value1, value2 }
    };
    
    const result = makeRequest().then(res => {
        console.log(res.value1) // 2
        console.log(res.value2) // 4
    });
    // 먼저 실행 됨
    console.log(result) //  Promise{<pending>}
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)