Колбэки
Часть раздела Основы Node.js путешествия по Node.js на Coddy. Урок 18 из 33.
Чтение большого файла занимает время, а программа, которая ждёт его, тем временем ничего больше не делает.
fs.readFile(path, 'utf8', callback) начинает чтение и сразу возвращает управление. Когда файл загружен, Node вызывает ваш колбэк с аргументом (err, text). При успешном выполнении err равен null, а в противном случае содержит ошибку, поэтому сначала проверьте его. Всё, для чего нужен текст, помещайте внутрь колбэка.
import fs from 'node:fs';
fs.readFile('poem.txt', 'utf8', (err, text) => {
if (err) {
console.log('No poem today');
return;
}
console.log(text.split('\n').length + ' lines');
});
console.log('Asked for the poem');Asked for the poem выводится первым: строка после readFile выполняется, пока файл ещё загружается.
Задание
ЛегкоЭтот урок открывает новый пример подсчёта с помощью обратного вызова в count.js, а не файлы инструмента для заметок из урока об обработке ошибок. Прилагаемые notes.json, notes.js и store.js включены; ваши предыдущие наработки остаются сохранёнными в своём уроке.
Чтение большого файла занимает время. Используя обратный вызов, Node может тем временем выполнять другую работу и вызывает ваш код, когда файл готов. Потренируйтесь на небольшой отдельной программе count.js, которая подсчитывает заметки в файле.
- В
count.jsуже выводитсяReading..., и программа знает, какой файл читать:file— это слово, введённое послеnode count.js, илиnotes.json, если ничего не введено. - Прочитайте этот файл с помощью
fs.readFileи обратного вызова. Всё дальнейшее происходит внутри обратного вызова. - Если чтение прошло успешно, преобразуйте текст в массив с помощью
JSON.parse. Выведите количество заметок в массиве, а затемnotes. Подсчитывайте заметки в массиве, а не строки файла. Вnotes.jsonизначально две заметки, поэтому выведется2 notes. - Если чтение не удалось, то есть ошибка в обратном вызове не равна
null, выведитеCannot read, а затем имя файла вместо количества заметок. - В обоих случаях в конце выведите
Done, тоже изнутри обратного вызова.
node count.js выводит:
Reading...
2 notes
Donenode count.js nothere.json выводит:
Reading...
Cannot read nothere.json
DoneПопробуйте: в этом уроке запускается count.js, поэтому в терминале отображается $ node count.js. Нажмите «Запустить», оставив поле пустым: программа прочитает notes.json. Затем введите в поле nothere.json и нажмите Enter, чтобы прочитать несуществующий файл.
Попробуйте сами
import fs from 'node:fs';
const file = process.argv[2] ?? 'notes.json';
console.log('Reading...');
// Прочитайте файл с помощью fs.readFile и функции обратного вызова.
// Выведите количество заметок, затем Done.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы Node.js
Потренируйтесь самостоятельно: Песочница Express