여러 개의 데이터를 순차적으로 파일에 기록하여 로그를 저장하는 기능을 구현하고 있습니다. forEach 루프 내에서 비동기 쓰기 함수를 호출하여 파일을 업데이트하려 합니다.
코드:
const fs = require('fs').promises;
const logs = ['Log 1', 'Log 2', 'Log 3'];
async function writeLogs() {
logs.forEach(async (log) => {
const content = await fs.readFile('log.txt', 'utf8').catch(() => '');
await fs.writeFile('log.txt', content + log + '\n');
});
}
writeLogs();
오류: 파일에 'Log 1', 'Log 2', 'Log 3'이 모두 저장되지 않고, 마지막 요소인 'Log 3'만 기록되거나 데이터가 누락된 채로 저장됩니다.
시도: async/await 키워드를 사용했음에도 불구하고 forEach 내부의 콜백 함수가 독립적으로 실행되어 순서가 보장되지 않는 것을 확인했습니다.
질문: forEach 대신 어떤 반복문을 사용해야 비동기 작업이 완료된 순서대로 파일 쓰기가 보장될까요?
댓글6
-
빗방울
2026.10.31 05:00
-
빗방울
2026.10.31 06:11
ㄹㅇ forEach로 비동기 돌리다가 멘붕 오는 게 국룰이죠 ㅋㅋ
그냥 for...of 가 제일 깔끔한 듯요.
-
빗방울
2026.10.31 07:26
ㄹㅇ ㅋㅋㅋ 이거 한 번 겪고 나면 다신 forEach 안 쓰게 됨요.
-
빗방울
2026.10.31 08:48
맞아요 ㅋㅋ 근데 이것보다 그냥
appendFile 쓰면 굳이 읽어올 필요 없어서 더 편할듯요.
-
빗방울
2026.10.31 09:18
ㄹㅇ ㅋㅋ for...of가 짱 편함요.
근데 저거 파일 읽고 쓰는 거 반복하면 성능 개판날 것 같은데
그냥 한 번에 합쳐서 쓰는 게 낫지 않을까요?
-
빗방울
2026.10.31 10:17
ㄹㅇ ㅋㅋ 저거 처음 보면 진짜 당황스러움요
그냥 for...of로 바꾸면 바로 해결될듯요
모든 이야기1455
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
for loop 쓰면 해결될듯요.
아니면 for...of 문 써보세요.
forEach는 await 안 먹히는 게 국룰임 ㅋㅋ