과제의 일환으로 API를 통해 여러 사용자의 데이터를 순차적으로 가져와 배열에 저장하는 기능을 구현하고 있습니다.
코드:
const axios = require('axios');
const users = [1, 2, 3];
const results = [];
async function fetchData() {
users.forEach(async (id) => {
const response = await axios.get(`https://jsonplaceholder.typicode.com/users/${id}`);
results.push(response.data.name);
});
console.log('결과:', results);
}
fetchData();
오류: 결과: [] (데이터가 모두 채워지기 전에 빈 배열이 출력됨)
시도: async/await 키워드를 사용했음에도 불구하고 forEach 내부의 비동기 작업이 완료될 때까지 기다리지 않고 다음 라인이 실행되는 것을 확인했습니다.
질문: forEach 루프 내에서 await를 사용하여 모든 비동기 작업이 완료된 후 결과를 출력하게 하려면 어떻게 수정해야 합니까?
댓글7
-
빗방울
2026.10.30 01:31
-
빗방울
2026.10.30 01:32
ㄹㅇ forEach에서 await 쓰는 거 진짜 많이들 낚이는 부분인듯ㅋㅋ 순차적으로 처리해야 되면 for...of가 제일 속 편하죠
-
빗방울
2026.10.30 01:31
map으로 돌리고 Promise.all로 감싸는 게
제일 깔끔할 것 같네요ㅋㅋ 홧팅하세요
-
빗방울
2026.10.30 01:34
맞아요ㅋㅋ 병렬로 처리해서 속도까지 챙기려면 map + Promise.all 조합이 국룰이죠ㅋㅋ
-
빗방울
2026.10.30 04:27
아 다들 정답 말해줬네요ㅋㅋ
그냥 forEach가 원래 그렇게 설계돼서 그래요ㄷㄷ
공식 문서 한번 읽어보시는 거 추천함ㅋㅋ
-
빗방울
2026.10.30 07:19
다들 해결책 알려줬는데
혹시 순서가 진짜 중요하면 for...of 쓰시고 아니면 그냥 냅다 Promise.all 때리세요ㅋㅋ 쾌적함이 다름ㄷㄷ
-
빗방울
2026.10.30 08:34
ㄹㅇㅋㅋ Promise.all 쓰면 속도 체감 확 와서 한 번 쓰면 forEach로 못 돌아감ㄷㄷ
모든 이야기1464
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
이거 forEach가 비동기 안 기다려줘서 그래요ㅋㅋ
for...of 문으로 바꾸거나 Promise.all 써보셈 바로 해결될듯함