배열의 각 요소에 대해 비동기 API 호출을 순차적으로 진행하여 결과값을 출력하려 합니다.
코드:
const data = [1, 2, 3];
async function fetchData(id) {
return new Promise(resolve => {
setTimeout(() => resolve(`Data ${id}`), 100);
});
}
async function process() {
data.forEach(async (id) => {
const result = await fetchData(id);
console.log(result);
});
console.log('Done');
}
process();
오류: 출력 결과가 예상과 다르게 나옵니다.
예상 출력: Data 1 -> Data 2 -> Data 3 -> Done
실제 출력: Done -> Data 1 -> Data 2 -> Data 3
시도: forEach 콜백 함수 앞에 async 키워드를 추가하고 내부에서 await를 사용함.
질문: forEach 내부의 await가 작동하지 않고 'Done'이 먼저 출력되는 이유와 이를 순차적으로 실행하게 만드는 방법은 무엇입니까?
댓글4
모든 이야기1454
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
총 1454개의 이야기
이거 forEach가 원래 비동기 기다려주는 놈이 아니라서 그래요ㅋㅋ
그냥 for...of 문으로 바꾸면
바로 해결될듯함