본문으로 건너뛰기

아이템25

비동기 함수에는 콜백대신 async 사용하기

  • 과거 자바스립트는 비동기 동작을 모델링하기 위해 콜백을 사용했다. 이로 인해 콜백 지옥이 유발되었다.
  • 이를 방지하기 위해 도입된 것이 Promise이다.

콜백보다는 async/await나 promise를 사용하자

  • 타입 추론이 원할하며
  • 코드 작성에 가독성이 좋다.

promise.race()

  • promise.race((iterable)) 란?
  • 매개변수 중 먼저 실행되는 값을 실행 시키는 promise함수
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, "one");
});

const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, "two");
});

Promise.race([promise1, promise2]).then((value) => {
console.log(value);
// Both resolve, but promise2 is faster
});
// Expected output: "two"
  • 밑 코드에서 promise 를 사용하면 반환타입이 promise 로 추론됨을 알 수 있다.
function timeout(millis: number): Promise<never> {
return new Promise((resolve, reject) => {
setTimeout(() => reject("timeout"), millis);
});
}
async function fetchWithTimeout(url: string, ms: number) {
return Promise.race([fetch(url), timeout(ms)]);
}

요약

  • 콜백보단 프로미스를 사용하자
  • asyncawait를 사용하는 것이 직관적 코드와 오류 제거에 좋다
  • 프로미스를 반환한다면 async로 선언하는것이 좋다.