Callbacks
Parte de la sección Conceptos básicos de Node.js del Journey de Node.js de Coddy. Lección 18 de 33.
Leer un archivo grande lleva tiempo, y un programa que se queda esperando no hace nada más mientras tanto.
fs.readFile(path, 'utf8', callback) inicia la lectura y regresa de inmediato. Cuando se carga el archivo, Node llama a tu función de callback con (err, text). err es null si todo sale bien y contiene un error en caso contrario, así que compruébalo primero. Todo lo que necesite el texto va dentro de la función de callback.
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 se imprime primero: la línea que está después de readFile se ejecuta mientras el archivo todavía se está cargando.
Desafío
FácilEsta lección abre un nuevo ejemplo de recuento con callback en count.js, en lugar de los archivos de tu herramienta de notas de la lección sobre cómo gestionar errores. Se incluyen los archivos notes.json, notes.js y store.js; tu trabajo anterior sigue guardado en su propia lección.
Leer un archivo grande lleva tiempo. Con un callback, Node puede hacer otras tareas mientras tanto y llamar a tu código cuando el archivo esté listo. Practica esto en un pequeño programa independiente, count.js, que cuenta las notas de un archivo.
count.jsya muestraReading...y sabe qué archivo leer:filees la palabra que se escribe después denode count.js, onotes.jsonsi no se escribe nada.- Lee ese archivo con
fs.readFiley un callback. Todo lo que sigue ocurre dentro del callback. - Si la lectura se realizó correctamente, convierte el texto en un arreglo con
JSON.parse. Muestra cuántas notas contiene el arreglo, seguido denotes. Cuenta las notas del arreglo, no las líneas del archivo.notes.jsonempieza con dos notas, así que muestra2 notes. - Si la lectura falla, es decir, si el error del callback no es
null, muestraCannot readseguido del nombre del archivo en lugar del recuento. - En ambos casos, muestra
Doneal final, también desde dentro del callback.
node count.js muestra:
Reading...
2 notes
Donenode count.js nothere.json muestra:
Reading...
Cannot read nothere.json
DonePruébalo: esta lección ejecuta count.js, así que la terminal muestra $ node count.js. Pulsa Run con el cuadro vacío y el programa leerá notes.json. Luego escribe nothere.json en el cuadro y pulsa Enter para leer un archivo que no existe.
Pruébalo tú mismo
import fs from 'node:fs';
const file = process.argv[2] ?? 'notes.json';
console.log('Reading...');
// Lee el archivo con fs.readFile y una función de devolución de llamada.
// Imprime el número de notas y luego Done.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Conceptos básicos de Node.js
Practica por tu cuenta: Playground de Express