본문으로 바로가기
COMMUNITY모든 이야기

여러 개의 데이터를 순차적으로 파일에 기록하여 로그를 저장하는 기능을 구현하고 있습니다. 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 대신 어떤 반복문을 사용해야 비동기 작업이 완료된 순서대로 파일 쓰기가 보장될까요?

모든 이야기1517

가벼운 안부부터 깊은 생각까지, 함께 나눠요.

글쓰기
총 1517개의 이야기
댓글