자바스크립트 비동기 반복문 처리

자바스크립트는 싱글 스레드 언어로, 한 번에 하나의 작업만 처리할 수 있습니다. 그러나 비동기 처리를 통해 여러 작업을 동시에 처리할 수 있습니다. 이러한 비동기 작업에서 반복문을 처리해야 할 때는 몇 가지 주의사항을 따라야 합니다.

1. 콜백 함수를 사용하는 비동기 반복문 처리

가장 기본적인 방법은 콜백 함수를 사용하여 비동기 반복문을 처리하는 것입니다. 콜백 함수는 비동기 작업이 완료될 때마다 호출되는 함수입니다. 여러 개의 비동기 작업을 처리하기 위해 반복문을 사용하고, 각 비동기 작업이 완료될 때마다 콜백 함수를 호출합니다.

const items = ['item1', 'item2', 'item3'];

function asyncFunction(item, callback) {
  // 비동기 작업 수행
  setTimeout(() => {
    console.log(item);
    callback(); // 다음 작업 호출
  }, 1000);
}

function processItems(items, index) {
  if (index < items.length) {
    asyncFunction(items[index], () => {
      processItems(items, index + 1); // 다음 아이템 순서로 호출
    });
  }
}

processItems(items, 0);

위의 예제에서는 items 배열의 각 요소를 순서대로 출력하고, 각 작업은 1초의 딜레이를 가지고 있습니다. processItems 함수는 반복문을 흉내내기 위해 재귀적으로 호출되며, 다음 아이템을 처리하기 위해 콜백 함수를 사용합니다.

2. async/await 문법을 사용하는 비동기 반복문 처리

ES2017부터 추가된 async/await 문법을 사용하면 비동기 코드를 동기적으로 작성할 수 있습니다. 이를 활용하면 반복문 내에서 각 비동기 작업을 순차적으로 실행할 수 있습니다.

const items = ['item1', 'item2', 'item3'];

function asyncFunction(item) {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(item);
      resolve();
    }, 1000);
  });
}

async function processItems(items) {
  for (const item of items) {
    await asyncFunction(item);
  }
}

processItems(items);

위의 예제에서는 asyncFunction 함수가 Promise를 반환하도록 변경되었습니다. processItems 함수는 async 키워드로 정의되었으며, for...of 문법을 사용하여 각 아이템을 순차적으로 처리합니다. await 키워드는 비동기 작업이 완료될 때까지 기다렸다가 다음 작업을 실행합니다.

3. 라이브러리나 프레임워크 활용

많은 라이브러리와 프레임워크가 비동기 반복문 처리를 간소화하기 위한 유틸리티 함수를 제공합니다. 예를 들어, async 라이브러리의 eachSeries 함수를 사용하면 간단한 방법으로 비동기 반복문을 처리할 수 있습니다.

const async = require('async');

const items = ['item1', 'item2', 'item3'];

function asyncFunction(item, callback) {
  setTimeout(() => {
    console.log(item);
    callback();
  }, 1000);
}

async.eachSeries(items, asyncFunction, () => {
  console.log('All items processed');
});

위의 예제에서는 async 라이브러리를 사용하여 eachSeries 함수를 호출하고, 각 아이템을 처리하는 asyncFunction 함수를 전달합니다. 마지막 파라미터는 모든 아이템이 처리된 후 호출되는 콜백 함수입니다.

결론

자바스크립트에서 비동기 반복문을 처리하는 방법에는 여러 가지가 있습니다. 콜백 함수, async/await 문법, 라이브러리나 프레임워크를 활용하여 간단하게 비동기 작업을 연속적으로 실행할 수 있습니다. 각 방법에는 장단점이 있으므로 상황에 맞게 적절한 방법을 선택하고 사용하는 것이 중요합니다.