async function 리터럴로 new Promise 대체하기


(Joonseok Hu) #1

nodeJS에서 비동기 작업을 하는 함수를 만들어서 사용해야 할 때마다 지금까지 이렇게 써왔는데요

const myAsyncJob = (param) => {
  return new Promise(resolve, reject) {
    mySlowJob(param, (error, data) => {
      if (error) return reject(error)
      resolve(data)
    })
  }
}

async 로 선언한 함수는 자동적으로 promise 를 리턴하도록 된다는걸 알고나서 이렇게 고치려고 합니다.

const myAsyncJob = async (param) => {
  mySlowJob(param, (error, data) => {
    if (error) throw error;
    return data
  })
}

그런데 성공시에는 제대로 promise.then 로 리턴되지만,
에러시에는 던진 에러가 promise.catch 로 리턴되진 않네요…

어떻게 쓰면 new Promise() 의 완벽한 대체제로 쓸수 있을까요?


(서재원) #2
  1. Async-await(and Promise)은 '느린 작업’에 대한 근본적인 해결책이 되지 못합니다.
  2. 저런 경우, mySlowJob이 thenable을 반환해주지 않는 이상 프로미스로 래핑하는 방법밖에 없습니다.
    (다행스럽게도, 저렇게 콜백을 사용하는 함수를 thenable을 사용하는 함수로 바꾸어 주는 유틸리티 함수를 nodejs에서 지원합니다.)
    (그리고 값 리턴 안 될겁니다.)
  3. 불필요한 ()와 {}는 빼주세요 흑흑…