[typescript] async/await의 제약사항과 주의사항

TypeScript에서 asyncawait를 사용하여 비동기적으로 코드를 작성할 때 주의해야 할 몇 가지 제약사항과 주의사항을 살펴보겠습니다.

제약사항

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를 사용할 수 없음

awaitPromise를 반환하는 함수에서만 사용할 수 있습니다. 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를 사용할 때 이러한 제약사항과 주의사항을 염두에 두면, 더 안정적이고 예측 가능한 코드를 작성할 수 있습니다.