Menu
CoddyTech

Promise

Coddy Node.js 여정의 Node.js 기초 섹션에 포함된 레슨. 33개 중 21번째.

콜백 안에 콜백이 있으면 따라가기 어려워지고, 각 콜백에서 err를 확인해야 합니다.

node:fs/promises는 대신 프로미스를 반환합니다. 프로미스는 나중에 도착할 결과를 나타내는 객체입니다. .then(fn)은 결과와 함께 실행되고, .catch(fn)은 그 전에 어떤 단계에서든 실패하면 실행되며, .finally(fn)은 어느 쪽이든 실행됩니다.

import { readFile } from 'node:fs/promises';

readFile('poem.txt', 'utf8')
    .then((text) => console.log(text.length + ' characters'))
    .catch(() => console.log('No poem today'))
    .finally(() => console.log('Bye'));

.then 안에서 발생한 오류도 .catch로 전달되므로, 하나의 처리기가 읽기와 파싱을 모두 처리합니다. .catch가 없는 상태에서 실패하는 프로미스는 프로그램을 충돌시킵니다.

challenge icon

챌린지

쉬움

이 단계에서는 Callbacks의 프로젝트 파일(count.js 포함)이 아니라, 과정에서 준비한 명령줄 노트 도구 프로젝트를 엽니다. 이전 작업은 해당 레슨에 그대로 남아 있습니다. count.js를 수정하기 전에 제공된 파일을 읽어 보세요. 이 사본에는 비동기 노트 개수 세기 예제가 들어 있습니다.

  • node:fs/promises의 readFile과 .then을 사용해 count.js를 다시 작성하세요.
  • 이제 파일이 없으면 .catch에서 No notes yet를 출력합니다.
  • .finally에서 출력하는 Done은 여전히 마지막에 나옵니다.

node count.js를 실행한 다음 node count.js nothere.json을 실행하세요.

인수를 전달하지 않으면 출력은 Reading..., 2 notes, Done 순이며, 각 항목은 한 줄에 하나씩 표시됩니다. nothere.json을 전달하면 가운데 줄에 No notes yet가 표시됩니다.

직접 해보기

import fs from 'node:fs';

const file = process.argv[2] ?? 'notes.json';

console.log('Reading...');
fs.readFile(file, 'utf8', (err, text) => {
    if (err) {
        console.log(`Cannot read ${file}`);
    } else {
        console.log(`${JSON.parse(text).length} notes`);
    }
    console.log('Done');
});

Node.js 기초의 모든 레슨

직접 연습해 보세요: Express 플레이그라운드