Промисы
Часть раздела Основы Node.js путешествия по Node.js на Coddy. Урок 15 из 24.
За последовательностями обратных вызовов трудно следить, и в каждой из них нужно проверять 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, приводит к аварийному завершению программы.
Задание
Легко- Перепиши
count.js, используяreadFileизnode:fs/promisesи.then. - Теперь при отсутствии файла выводится
No notes yetблагодаря.catch. Doneпо-прежнему выводится последним благодаря.finally.
Запусти node count.js, затем node count.js nothere.json.
Попробуйте сами
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
1Запуск JavaScript в Node
Знакомство с NodeАргументы командной строкиКоманды