LearnApplyShare

[js] await 뒤에 동기함수가 오면?

September 05, 2019 - [js]

async/await 를 사용할 때, 일반적으로 프라미스를 리턴하는 비동기함수의 응답을 기다릴 때 비동기 함수 앞에 await 를 사용한다.

하지만, await 다음 함수가 프라미스를 리턴할 지 일반적인 value 를 리턴할 지가 동적으로 바뀔 수 있다고 하자. 그럼 await 다음 위치하는 함수가 일반적인 값을 리턴하는 경우 결과값은 어떻게 될까?

다음 예시를 통해 결과를 예측해 보자

function syncFn(){
  return 1
}

async function asyncFn(){
  const result = await fn()
  console.log(result)   // print 1
}

asyncFn()

await 는 await 뒤에서 호출되는 함수의 결과값을 무조건? Promise.resolve 로 감싼다(필자의 예상). 따라서 result 변수에는 fn()이 프라미스를 리턴하지 않더라도 그냥 fn() 이 리턴하는 값이 그대로 담긴다.

(그러므로) fn()Promise.resolve(1) 을 리턴하더라도 결과는 동일하게 된다

Promise.resolve 결과를 Promise.resolve 한 결과는 처음 Promise.resolve 의 결과와 같기 때문이다

const a = Promise.resolve(1)
const b = Promise.resolve(a)
console.log(a === b)  // print true