Menu
CoddyTech

Колбэки

Часть раздела Основы 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 выполняется, пока файл ещё загружается.

challenge icon

Задание

Легко

Этот урок открывает новый пример подсчёта с помощью обратного вызова в count.js, а не файлы инструмента для заметок из урока об обработке ошибок. Прилагаемые notes.json, notes.js и store.js включены; ваши предыдущие наработки остаются сохранёнными в своём уроке.

Чтение большого файла занимает время. Используя обратный вызов, Node может тем временем выполнять другую работу и вызывает ваш код, когда файл готов. Потренируйтесь на небольшой отдельной программе count.js, которая подсчитывает заметки в файле.

  1. В count.js уже выводится Reading..., и программа знает, какой файл читать: file — это слово, введённое после node count.js, или notes.json, если ничего не введено.
  2. Прочитайте этот файл с помощью fs.readFile и обратного вызова. Всё дальнейшее происходит внутри обратного вызова.
  3. Если чтение прошло успешно, преобразуйте текст в массив с помощью JSON.parse. Выведите количество заметок в массиве, а затем notes. Подсчитывайте заметки в массиве, а не строки файла. В notes.json изначально две заметки, поэтому выведется 2 notes.
  4. Если чтение не удалось, то есть ошибка в обратном вызове не равна null, выведите Cannot read , а затем имя файла вместо количества заметок.
  5. В обоих случаях в конце выведите Done, тоже изнутри обратного вызова.

node count.js выводит:

Reading...
2 notes
Done

node 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.
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

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

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