토이 프로젝트에서 여러 개의 설정 파일을 생성하는 기능을 구현하고 있습니다. 반복문을 통해 파일 내용을 작성하려는데, 예상과 달리 마지막 데이터만 파일에 남는 현상이 발생하고 있습니다.
코드:
const fs = require('fs').promises;
async function saveFiles() {
const data = ['Content 1', 'Content 2', 'Content 3'];
data.forEach(async (text) => {
await fs.writeFile('output.txt', text);
});
}
saveFiles();
오류: output.txt 파일의 내용이 'Content 1', 'Content 2' 순차적으로 쌓이지 않고 최종적으로 'Content 3'만 저장됨.
시도: async/await를 사용했음에도 forEach 내부의 비동기 처리가 기다려지지 않는 점을 확인하였고, 단순 호출 순서를 변경해 보았으나 결과는 동일했습니다.
질문: forEach 대신 어떤 반복문을 사용해야 비동기 작업이 순차적으로 완료되어 파일 쓰기 작업이 의도대로 수행될까요?
댓글11
-
빗방울
2026.10.31 12:21
-
빗방울
2026.10.31 14:52
ㄹㅇ for...of가 국룰이죠ㅋㅋ
근데 이것도 결국 appendFile 안 쓰면 계속 덮어쓸 텐데
그 부분까지 같이 알려주면 좋을 듯요
-
빗방울
2026.10.31 17:07
맞음ㅋㅋ forEach가 진짜 함정임
처음 할 때 다들 여기서 한 번씩 겪는 듯요ㅋㅋ
-
빗방울
2026.10.31 14:02
내용 계속 쌓으시려면 writeFile 말고 appendFile 쓰셔야 할 것 같은데 이건 확인해 보셨나요 ㅋㅋ
-
빗방울
2026.10.31 14:36
맞음ㅋㅋ writeFile는 그냥 덮어쓰기라 appendFile로 가야 내용 안 날아갈 듯요.
-
빗방울
2026.10.31 14:59
맞음ㅋㅋ
이거 안 바꾸면 루프 고쳐도 결국 마지막 내용만 남을 듯요.
-
빗방울
2026.10.31 16:07
ㄹㅇ 그거 안 바꾸면 루프 돌려봤자 의미 없을 듯요 ㅋㅋ
그냥 덮어쓰기만 계속 될 것 같은데 확인해보세요
-
빗방울
2026.10.31 17:51
ㄹㅇ 그거 안 바꾸면 루프 고쳐도 결과 똑같을 듯요 ㅋㅋ 얼른 바꿔보셈요
-
빗방울
2026.10.31 16:35
그냥 Promise.all로 한꺼번에 밀어넣는 방법도 있긴 한데
이건 순서 보장 안 돼서 님 상황엔 안 맞을 수도 있겠네요 ㅋㅋ
일단 위에서 말한 것부터 고쳐보셈요
-
빗방울
2026.10.31 17:13
ㄹㅇ Promise.all 쓰면 순서 뒤죽박죽 돼서 더 골치 아파질 듯요 ㅋㅋ
그냥 얌전히 for...of 쓰시는 게 정신건강에 이로울 것 같네요
-
빗방울
2026.10.31 18:46
근데 파일 하나에 계속 쓰는 거면 그냥 전체 내용을 문자열로 합쳐서 writeFile 한 번만 때리는 게 성능상 훨씬 이득일 듯요ㅋㅋ 그렇게 하면 루프 고민 안 해도 됨ㅋㅋ
모든 이야기1496
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
for loop나 for...of로 바꾸면 해결될 듯함.
forEach는 await 안 기다려줘서 저러는 거네요.
빡세겠네요 ㅋㅋ