Menu
CoddyTech

Hai lần đọc độc lập

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 24 trên 33.

Hai thao tác đọc có thể bắt đầu cùng lúc khi thao tác này không cần kết quả của thao tác kia. Promise.all nhận các promise và trả về một promise duy nhất chứa mảng kết quả. Chỉ cần await mảng đó một lần.

const [name, city] = await Promise.all([
    readFile('name.txt', 'utf8'),
    readFile('city.txt', 'utf8'),
]);

Kết quả đầu tiên thuộc về promise đầu tiên, ngay cả khi thao tác đọc thứ hai hoàn tất sớm hơn. Dấu ngoặc vuông gán hai kết quả cho hai biến riêng biệt. Nếu một trong hai thao tác đọc thất bại, promise tổng hợp sẽ bị từ chối. Hãy dùng await riêng khi một thao tác cần kết quả của thao tác trước đó.

Trình đọc dùng trong phần luyện tập sẽ từ chối thao tác đọc nếu bạn await thao tác đó trước khi thao tác đọc còn lại bắt đầu. Cách này giúp bạn nhận ra việc chờ quá sớm, chứ không đo tốc độ thực thi.

challenge icon

Thử thách

Dễ

Đây là một dự án luyện tập nhỏ. Phần thiết lập đã có sẵn; bạn chỉ chỉnh sửa practice.js.

Đọc note.txt và owner.txt bằng Promise.all. Dùng kết quả để in ra Ada: Buy milk. Giữ ghi chú ở vị trí đầu tiên trong mảng đầu vào. Nút Chạy thực thi node practice.js.

Dùng reader đã nhập. Bắt đầu cả hai lần đọc trước khi chờ; reader luyện tập này cố ý từ chối việc chờ tuần tự.

Dùng các giá trị noteFile và ownerFile đã cho. Chạy với other-note.txt other-owner.txt: kết quả mong đợi là Bo: Walk.

Tự làm thử

import { readFile } from './reader.js';
const [noteFile = 'note.txt', ownerFile = 'owner.txt'] = process.argv.slice(2);
const note = '';
const owner = '';
console.log(owner + ': ' + note);

Tất cả bài học trong Kiến thức cơ bản về Node.js

Tự luyện tập: Playground Express