no-await-in-loop

baby_dev·2022년 5월 19일
0

eslint를 사용하던중 발견한 이슈입니다. await를 loop안에서 이용하게 되면 async/await의 병렬화 이점을 충분히 활용하지 않는다 라는 이슈입니다.

async function foo(things) {
  const results = [];
  for (const thing of things) {
    results.push(await bar(thing));
  }
  return baz(results);
}

이렇게 이용을 하면 비동기인 bar 함수에서 promise요청을 마치고 다음 await함수로 들어가기때문에 비효율적입니다.

async function foo(things) {
  const results = [];
  for (const thing of things) {
    results.push(bar(thing));
  }
  return baz(await Promise.all(results));
}

반복문안에 await를 적지않고 bar 함수를 실행하여 results 배열에 pending된 Promise가 담아줍니다. 그리고 results 배열을 Promise.all 의 인자에 전달해주면 모든 프로미스의 응답이 끝날때까지 대기하다가 마지막 응답이 끝나면 반환 결과가 담긴 배열을 반환합니다. 이렇게 되면 비동기 함수들을 모두 병렬적으로 실행한 상태에서 마지막 응답이 끝날때 결과를 반환하기에 더 효율적인 코드가 됩니다.

profile
sming

0개의 댓글