Node.js나 브라우저에서 비동기 작업을 수행할 때, 여러 개의 비동기 작업을 병렬로 처리하고 싶을 때가 있습니다. 이 때 비동기 이터레이션과 await for...of
문을 사용하여 간단하게 병렬 처리를 구현할 수 있습니다.
비동기 이터레이션이란?
비동기 이터레이션은 Symbol.asyncIterator
를 통해 비동기적으로 이터러블을 산출하는 것을 말합니다. 이터러블 객체는 for...of
루프나 ...
연산자를 통해 순회할 수 있습니다.
await for…of 문
await for...of
문은 이터러블을 비동기적으로 순회하면서 각 항목에 대해 await를 적용하는 문법입니다. 이를 사용하여 각 비동기 작업을 순차적으로 실행할 수 있습니다.
다음은 TypeScript로 구현한 예제 코드입니다.
async function processTasks(tasks: AsyncIterable<Promise<void>>) {
for await (const task of tasks) {
await task;
}
}
위 예제 코드에서 processTasks
함수는 AsyncIterable
을 받아 이를 순회하면서 각 Promise를 순차적으로 처리합니다.
병렬 처리 방법
await for...of
문을 사용하여 각 항목의 순차적인 처리를 수행할 수 있지만, 여러 작업을 병렬로 처리하고 싶을 때는 Promise.all
메서드를 사용할 수 있습니다. 다음은 Promise.all
을 사용하여 이터러블의 모든 항목을 병렬로 처리하는 예제 코드입니다.
async function processTasksParallel(tasks: AsyncIterable<Promise<void>>) {
await Promise.all(tasks);
}
위 예제 코드에서 Promise.all
을 사용하여 모든 작업을 병렬로 실행합니다.
이러한 방법을 사용하여 비동기 이터레이션과 await for...of
를 활용하면 간단하게 병렬 처리를 구현할 수 있습니다.
결론
이러한 비동기 이터레이션과 await for...of
문을 사용하여 간단하면서도 효율적으로 병렬 처리를 구현할 수 있습니다. 이를 통해 비동기 작업을 효율적으로 처리하는데 도움이 될 것입니다.
참고: