과제로 여러 개의 설정 파일을 생성하는 기능을 구현하고 있습니다. 반복문을 통해 파일 시스템에 데이터를 기록하려 하는데, 실행 순서가 보장되지 않는 문제가 발생하고 있습니다.
코드:
const fs = require('fs').promises;
async function writeFiles() {
const data = ['first', 'second', 'third'];
data.forEach(async (text) => {
await fs.writeFile(`${text}.txt`, text);
console.log(`${text} written`);
});
console.log('All done');
}
writeFiles();
오류: All done
second written
first written
third written
시도: async/await를 사용하였으나 forEach 내부의 콜백 함수가 비동기로 동작하여 전체 흐름을 제어하지 못하는 것을 확인했습니다.
질문: forEach 대신 어떤 반복문을 사용해야 async/await가 의도한 대로 순차적으로 작동하여 'All done' 로그가 가장 마지막에 출력될까요?
댓글10
-
빗방울
2026.10.30 13:25
-
빗방울
2026.10.30 14:04
ㄹㅇㅋㅋ 아니면 Promise.all로 한꺼번에 밀어넣고 기다리는 것도 방법일 듯함
-
빗방울
2026.10.30 16:15
ㄹㅇㅋㅋ
for...of가 국룰임ㅋㅋ 아니면 그냥 일반 for문 써도 해결될듯요
-
빗방울
2026.10.30 17:11
ㄹㅇㅋㅋ 이거 처음에 다들 한 번씩 낚이는 구간임ㅋㅋ 그냥 for...of 쓰면 속 편하죠
-
빗방울
2026.10.30 18:04
ㄹㅇㅋㅋ 저도 처음에 이거 때문에 밤샜음
그냥 for...of가 정신건강에 이로운듯요ㅋㅋ
-
빗방울
2026.10.30 16:20
근데 이거 순서가 진짜 중요한 거 아니면
Promise.all이 속도는 훨씬 빠를걸요ㅋㅋ
순차 실행되면 파일 많을 때 개느려짐ㄷㄷ
-
빗방울
2026.10.30 18:52
ㄹㅇㅋㅋ 파일 수백 개 되면 체감 확 될듯요
그냥 싹 다 던져놓고 기다리는 게 국룰임ㅋㅋ
-
빗방울
2026.10.30 16:24
근본적인 원인은 forEach가 반환값을 무시해서 그런 거임ㅋㅋ 그냥 map으로 돌려서 Promise.all 거는 게 제일 깔끔할 듯요
-
빗방울
2026.10.30 18:31
과제인데 이거 때문에 고생하시네요ㅋㅋ 정석대로라면 for...of가 맞는데 진짜 순서가 중요하면 그냥 동기 함수인 writeFileSync 쓰는 게 제일 속 편할 수도 있음ㅋㅋ
-
빗방울
2026.10.30 19:16
ㄹㅇㅋㅋ 과제면 그냥 writeFileSync 쓰는 게 뇌 빼고 코딩하기 제일 편하긴 함ㅋㅋ
근데 나중에 교수님이 비동기 처리 안 했냐고 태클 걸 수도 있을 듯요ㄷㄷ
모든 이야기1454
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
이거 for...of 문으로 바꾸면 해결될 듯함ㅋㅋ forEach는 원래 await 안 먹어서 킹받음