[typescript] await for...of 문을 사용할 때의 주의점
TypeScript를 사용하면 비동기 작업을 보다 쉽게 다룰 수 있습니다. 그런데 때때로 await for...of
루프를 사용할 때 주의해야 할 사항이 있습니다.
문제 상황
아래의 예제를 살펴보겠습니다.
async function processArray(arr: number[]) {
for (const item of arr) {
const result = await someAsyncFunction(item);
console.log(result);
}
}
위의 코드에서 processArray
함수는 배열을 받아 각 요소에 대해 someAsyncFunction
을 순서대로 호출하여 결과를 출력하는 함수입니다.
그러나 위와 같이 await for...of
문을 사용할 경우, 반복문 내에서 순차적으로 실행되지 않을 수 있습니다.
해결방법
Promise.all
을 사용하여 병렬로 비동기 작업을 처리하는 것이 좋은 대안입니다.
async function processArray(arr: number[]) {
const promises = arr.map(item => someAsyncFunction(item));
const results = await Promise.all(promises);
results.forEach(result => console.log(result));
}
위의 코드에서는 Promise.all
메서드를 사용하여 배열의 각 항목에 대한 비동기 작업을 동시에 처리하고, 모든 작업이 완료되면 결과를 출력합니다. 이렇게 하면 작업이 병렬로 처리되므로 성능적으로 이점을 얻을 수 있습니다.
결론
await for...of
루프를 사용할 때는 반복문 내에서 순차적으로 실행되지 않을 수 있다는 점을 주의해야 합니다. 이런 경우에는 Promise.all
을 사용하여 병렬로 비동기 작업을 처리하는 것이 좋은 대안입니다.
위와 같은 상황을 고려하여 코드를 작성하여 TypeScript의 강력한 비동기 처리 기능을 최대한 활용할 수 있습니다.