[심화] 비동기 함수의 반복문은 어떻게 사용할까?

728x90

비동기 함수의 반복문

forEach( )

⸰ 동기적으로 동작, 비동기 함수를 기다리지 않음

⸰ try/catch 가능

⸰ 간단한 동기 반복 작업에 사용

const func = async () => {
  await Promise.all(data.map(async (i) => {
    await insertDatabase(i);
  }));
};

비동기 작업의 완료를 보장하지 않으므로, Promise.all을 사용하여 병렬 처리

 

for 

⸰ 동기적으로 동작, 비동기 함수를 기다리지 않음

⸰ 조건식, 초기화식, 후위식 설정 가능하여 유연하게 반복 제어

const func = async () => {
  for (let i = 0; i < data.length; i++) {
    await insertDatabase(data[i]);
  }
};

비동기 작업을 순차적으로 처리

 

for ... of

⸰ 동기적으로 동작, 비동기 함수를 기다리지 않음

⸰ try/catch 가능

⸰ 배열이나 이터러블 객체 순회에 사용

const func = async () => {
  for (let i of data) {
    await insertDatabase(i);
  }
};

비동기 작업을 순차적으로 처리

 

for ... in

동기적으로 동작, 비동기 함수와 무관하게 동작

객체 속성을 순회할 때 사용

const func = async () => {
  for (let i in data) {
    await insertDatabase(data[i]);
  }
};

객체의 속성을 순회하며, 배열에서는 인덱스를 통해 접근

 

for await ... of

비동기적으로 동작, await 키워드를 사용하여 비동기 작업이 완료될 때까지 기다림

비동기 이터러블 객체(ex 비동기 생성기)를 순회할 때 사용

const func = async () => {
  for await (let i of data) {
    await insertDatabase(i);
  }
};

비동기 이터러블 객체나 배열의 비동기 작업을 순차적으로 처리

 

Promise.All( )

⸰ 비동기적으로 동작, 여러 비동기 작업을 병렬로 실행 후 모든 Promise가 해결되면 결과를 반환

⸰ 한 작업이라도 실패하면, 전체가 실패로 처리됨

⸰ 여러 비동기 작업을 병렬로 실행하고, 모두 완료된 후 결과를 처리할 때 사용

const func = async () => {
  await Promise.all(data.map(async (i) => {
    await insertDatabase(i);
  }));
};

비동기 작업을 병렬로 처리

 

 

 

 

 

 

 

728x90