[typescript] async/await의 제약사항과 주의사항
TypeScript에서 async
및 await
를 사용하여 비동기적으로 코드를 작성할 때 주의해야 할 몇 가지 제약사항과 주의사항을 살펴보겠습니다.
제약사항
1. 최상위 수준의 await
는 사용할 수 없음
TypeScript에서는 최상위 수준의 await
를 사용할 수 없습니다. 이는 모듈 수준에서 직접 await
를 사용할 수 없다는 것을 의미합니다. 대신 TypeScript는 async
함수를 이용하여 비동기 작업을 처리합니다.
// 잘못된 예시
// Error: 'await' is only allowed within an async function.
await someAsyncOperation();
// 올바른 예시
async function example() {
await someAsyncOperation();
}
2. Promise가 아닌 값에 await
를 사용할 수 없음
await
는 Promise
를 반환하는 함수에서만 사용할 수 있습니다. await
를 사용하려는 값이 Promise
가 아니면 컴파일러는 오류를 발생시킵니다.
// 잘못된 예시
const result = await nonPromiseValue;
// 올바른 예시
const result = await somePromise;
주의사항
1. try-catch
블록을 사용하여 에러 처리
await
를 사용하는 경우, 해당 비동기 작업에서 발생하는 에러를 적절히 처리해야 합니다. 이를 위해 try-catch
블록을 사용하여 예외를 처리할 수 있습니다.
async function fetchData() {
try {
const data = await fetchSomeData();
// 데이터 처리
} catch (error) {
// 에러 처리
}
}
2. 무한 반복과 함께 사용할 때 주의
await
를 루프 안에서 사용할 때, 무한 반복에 빠질 수 있는 가능성에 주의해야 합니다. 이를 방지하기 위해 while
루프 등에서 await
를 사용할 때 탈출 조건을 명확히 지정해야 합니다.
while (condition) {
// 비동기 작업
await someAsyncOperation();
}
async/await
를 사용할 때 이러한 제약사항과 주의사항을 염두에 두면, 더 안정적이고 예측 가능한 코드를 작성할 수 있습니다.