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가 없는 상태에서 실패하는 프로미스는 프로그램을 충돌시킵니다.
챌린지
쉬움이 단계에서는 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 플레이그라운드