Callback
Fa parte della sezione Fondamenti di Node.js del percorso Node.js di Coddy. Lezione 18 di 33.
Leggere un file di grandi dimensioni richiede tempo e, nel frattempo, un programma che resta in attesa non fa nient'altro.
fs.readFile(path, 'utf8', callback) avvia la lettura e restituisce subito. Quando il file è caricato, Node chiama la tua callback con (err, text). err è null in caso di successo e contiene un errore altrimenti, quindi controllalo per prima cosa. Tutto ciò che ha bisogno del testo va inserito nella 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 viene stampato per primo: la riga dopo readFile viene eseguita mentre il file è ancora in caricamento.
Sfida
FacileQuesta lezione apre un nuovo esempio di conteggio con callback in count.js, anziché usare i file del tuo strumento per le note della lezione Gestione degli errori. Sono inclusi i file forniti notes.json, notes.js e store.js; il lavoro svolto in precedenza resta salvato nella sua lezione.
Leggere un file di grandi dimensioni richiede tempo. Con una callback, Node può svolgere altre attività nel frattempo e richiama il tuo codice quando il file è pronto. Esercitati con questo in un piccolo programma separato, count.js, che conta le note in un file.
count.jsstampa giàReading...e sa quale file leggere:fileè la parola digitata doponode count.js, oppurenotes.jsonse non viene digitato nulla.- Leggi quel file con
fs.readFilee una callback. Tutto ciò che segue avviene all'interno della callback. - Se la lettura è riuscita, trasforma il testo in un array con
JSON.parse. Stampa quante note contiene l'array, seguite danotes. Conta le note nell'array, non le righe del file.notes.jsoninizia con due note, quindi stampa2 notes. - Se la lettura non è riuscita, cioè se l'errore della callback non è
null, stampaCannot readseguito dal nome del file invece del conteggio. - In entrambi i casi, stampa
Doneper ultimo, sempre dall'interno della callback.
node count.js stampa:
Reading...
2 notes
Donenode count.js nothere.json stampa:
Reading...
Cannot read nothere.json
DoneProva: questa lezione esegue count.js, quindi il terminale mostra $ node count.js. Premi Run con la casella vuota e il programma legge notes.json. Poi digita nothere.json nella casella e premi Invio per leggere un file che non esiste.
Provalo tu
import fs from 'node:fs';
const file = process.argv[2] ?? 'notes.json';
console.log('Reading...');
// Leggi il file con fs.readFile e una funzione di callback.
// Stampa il numero di note, poi Done.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti di Node.js
Esercitati da solo: Playground Express