Promise.all
Thuộc phần Kiến thức cơ bản về Node.js trong hành trình Node.js của Coddy. Bài học 25 trên 33.
Các thao tác đọc độc lập có thể cung cấp những phần khác nhau của cùng một kết quả. Hãy bắt đầu cả hai thao tác, chờ kết quả rồi dùng mỗi kết quả cho mục đích riêng.
const [forecast, location] = await Promise.all([
readFile('forecast.txt', 'utf8'),
readFile('location.txt', 'utf8'),
]);
console.log(location + ': ' + forecast);Thứ tự kết quả tuân theo mảng đầu vào, ngay cả khi thao tác đọc thứ hai hoàn tất trước. Công cụ ghi chú của bạn thay vào đó đọc ghi chú và cài đặt hiển thị. Hàm hỗ trợ readJson đã chuẩn bị sẵn xử lý các tệp bị thiếu và bị hỏng. Hãy định dạng số thứ tự của ghi chú trước khi đảo ngược các dòng hiển thị, để việc thay đổi cách xem không làm thay đổi số thứ tự xác định ghi chú nào.
Thử thách
DễBước này mở dự án công cụ dòng lệnh ghi chú đã được chuẩn bị sẵn cho khóa học, chứ không phải các tệp dự án của bạn từ Async and Await (bao gồm store.js). Phần bạn làm trước đó vẫn nằm trong bài học riêng. Hãy đọc các tệp được cung cấp trước khi chỉnh sửa store.js. Bản sao này có các lệnh ghi chú, trình đọc JSON và tệp cấu hình.
Công cụ ghi chú giờ cần cả notes.json và settings.json. Hàm trợ giúp readJson(name, fallback) được cung cấp sẽ giữ nguyên cách xử lý lỗi tệp hiện có.
- Trong
store.js, thay các chỗ trống bằng kết quả đọc cả hai tệp cùng lúc vớiPromise.all. Nếu thiếu tệp ghi chú, hãy dùng[]; nếu thiếu cài đặt, hãy dùng{}. - Trong
notes.js, nhánhlistđã tạo sẵn các dòng được đánh số. Khistore.settings.sortlànewest, hãy đảo ngược thứ tự các dòng đó trước khi in ra. Với mọi cài đặt khác, hãy giữ nguyên thứ tự ban đầu.
Thử list: sau Notes for you, kết quả mong đợi là 2. Call Ada, 1. Buy milk. Đổi cài đặt thành oldest rồi thử lại: các số vẫn như cũ nhưng theo thứ tự tăng dần. Khôi phục newest trước khi kiểm tra.
Tự làm thử
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);
}
};
// Thay các giá trị giữ chỗ này bằng hai kết quả từ 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;
Tất cả bài học trong Kiến thức cơ bản về Node.js
1Chạy JavaScript trên Node
Xin chào, NodeĐọc lệnhĐối số dòng lệnhCác lệnhTự luyện tập: Playground Express