Promise.all
Coddy Node.js 여정의 Node.js 기초 섹션에 포함된 레슨. 33개 중 25번째.
서로 독립적인 읽기 작업은 하나의 결과에서 서로 다른 부분을 제공할 수 있습니다. 두 작업을 모두 시작하고, 결과를 기다린 다음, 각 결과를 용도에 맞게 사용하세요.
const [forecast, location] = await Promise.all([
readFile('forecast.txt', 'utf8'),
readFile('location.txt', 'utf8'),
]);
console.log(location + ': ' + forecast);두 번째 읽기 작업이 먼저 끝나더라도 결과의 순서는 입력 배열을 따릅니다. 여러분의 메모 도구는 대신 메모와 표시 설정을 읽습니다. 미리 준비된 readJson 도우미는 파일이 없거나 손상된 경우를 처리합니다. 표시 줄을 뒤집기 전에 메모 번호를 형식에 맞게 표시하세요. 그래야 보기를 바꾸더라도 각 번호가 가리키는 메모는 바뀌지 않습니다.
챌린지
쉬움이 단계에서는 Async and Await에서 작업한 프로젝트 파일(store.js 포함)이 아니라, 강의에서 준비한 명령줄 메모 도구 프로젝트를 엽니다. 이전 작업은 해당 강의에 그대로 남아 있습니다. store.js를 수정하기 전에 제공된 파일을 읽어 보세요. 이 복사본에는 메모 명령, JSON 판독기와 설정 파일이 포함되어 있습니다.
이제 메모 도구에는 notes.json과 settings.json이 모두 필요합니다. 제공된 readJson(name, fallback) 도우미 함수는 기존 파일 오류 처리를 그대로 유지합니다.
store.js에서 빈 자리 표시자를 두 파일을 함께 읽은 결과로 바꾸세요.Promise.all을 사용하세요. 메모 파일이 없으면[]를 사용하고, 설정 파일이 없으면{}를 사용합니다.notes.js의list분기에는 이미 번호가 매겨진 줄을 만드는 코드가 있습니다.store.settings.sort가newest이면 출력하기 전에 줄의 순서를 뒤집으세요. 다른 설정이면 원래 순서를 유지합니다.
list를 실행해 보세요. Notes for you 다음에 2. Call Ada, 1. Buy milk가 나와야 합니다. 설정을 oldest로 바꾸고 다시 실행해 보세요. 같은 번호가 오름차순으로 나타납니다. 확인하기 전에 newest로 되돌리세요.
직접 해보기
import { existsSync } from 'node:fs';
import { readFile, writeFile } from 'node:fs/promises';
const file = 'notes.json';
const readJson = async (name, fallback) => {
if (!existsSync(name)) {
return fallback;
}
try {
return JSON.parse(await readFile(name, 'utf8'));
} catch (err) {
console.error(`${name} is damaged: ${err.message}`);
process.exit(1);
}
};
// 이 자리표시자들을 두 readJson 결과로 교체하세요.
const notes = [];
const settings = {};
const store = {
notes,
settings,
async save() {
await writeFile(file, JSON.stringify(this.notes, null, 2));
},
async add(text) {
this.notes.push(text);
await this.save();
return this.notes.length;
},
async remove(n) {
const [text] = this.notes.splice(n - 1, 1);
await this.save();
return text;
},
};
export default store;
Node.js 기초의 모든 레슨
직접 연습해 보세요: Express 플레이그라운드