아이템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)]);
}
요약
- 콜백보단 프로미스를 사용하자
async와await를 사용하는 것이 직관적 코드와 오류 제거에 좋다- 프로미스를 반환한다면
async로 선언하는것이 좋다.