문제 발생
Redux toolket에서 예시로 아래와 같은 코드를 작성했다.
const target = [1,2,3]
export const fetchDataCombine = createAsyncThunk(
'project/test',
async (target) => {
const response = []
// eslint-disable-next-line no-restricted-syntax
for (const data of target) {
const url = `http://localhost:3000/?target=${data}`;
response.push(await axios.get(url));
}
return response;
}
);
// error
for..of 문 내부에서 'await'을 작성하고 실행하면 다음과 같은 error가 발생한다.
Unexpected `await` inside a loop no-await-in-loop
해결 과정
위와 같은 코드는 ESLint공식문서를 확인하면 await에 이점을 충분히 활용하지 못하는 코드라고 말하고 있다.
for..of 문으로 순서대로 작성하는 것과 await을 사용하여 동기적으로 실행하는 것에 차이가 없다고 생각할 수도 있지만 성능 차이가 심하게 있다고 한다. 마침 테스트를 하신 분의 블로그를 참고했다.
for..of 에서 await을 사용하면
for문이 실행 -> await -> for문이 실행 -> awiat
'Promise.all' 을 사용해서 해결했다.
Promise.All : 모든 promise가 이행될 때까지 기다렸다가 그 결과 값을 담은 배열을 반환하는 메서드
Promise.all 사용
for문이 실행 -> for문이 실행 -> 모든 프로미스가 해결될 때가지 대기
해결
const target = [1,2,3]
export const fetchDataCombine = createAsyncThunk(
'project/test',
async (target) => {
const promise = []
// eslint-disable-next-line no-restricted-syntax
for (const data of target) {
const url = `http://localhost:3000/?target=${data}`;
promise.push(axios.get(url));
}
const results = Promise.all(promise)
return results;
}
);
// (3) [{…}, {…}, {…}]
'React' 카테고리의 다른 글
[React] react-responsive 반응형 라이브러리 + Typescript (0) | 2022.05.11 |
---|---|
[React] Recoil (0) | 2022.05.02 |
[React] Typescript 상속을 이용해 라이브러리에 없는 타입 지정 (React+ Typescript + Plotly js) (0) | 2021.06.16 |
[React] Javascript에는 있지만 Typescript에는 없는 속성일 경우 (0) | 2021.06.16 |
[React] React에서 Plotly.js 테스팅시 다양한 error (0) | 2021.06.16 |