Menu
CoddyTech

Два независимых чтения

Часть раздела Основы Node.js путешествия по Node.js на Coddy. Урок 24 из 33.

Два чтения могут начаться одновременно, если ни одно из них не зависит от результата другого. Promise.all принимает их промисы и возвращает один промис для массива результатов. Дождитесь этого массива один раз.

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

Первый результат соответствует первому промису, даже если второе чтение завершается раньше. Квадратные скобки присваивают два результата отдельным переменным. Если одно из чтений завершится ошибкой, объединённый промис будет отклонён. Используйте отдельные выражения await, если одной операции нужен результат предыдущей.

Предоставленный тренировочный считыватель отклоняет чтение, если его ожидают до того, как началось другое чтение. Так становится заметно, что ожидание началось слишком рано; скорость выполнения при этом не измеряется.

challenge icon

Задание

Легко

Это небольшой учебный проект. Его настройка уже выполнена; редактируй только practice.js.

Прочитай note.txt и owner.txt с помощью Promise.all. Используй результаты, чтобы вывести Ada: Buy milk. Оставь note первым в массиве входных данных. Кнопка «Играть» выполняет node practice.js.

Используй импортированный модуль для чтения. Начни оба чтения, прежде чем ждать их завершения; этот учебный модуль для чтения намеренно не допускает последовательных ожиданий с помощью await.

Используй предоставленные значения noteFile и ownerFile. Запусти с аргументами other-note.txt other-owner.txt: ожидаемый результат — Bo: Walk.

Попробуйте сами

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

Все уроки раздела Основы Node.js

Потренируйтесь самостоятельно: Песочница Express