Menu
CoddyTech

Promise

Fa parte della sezione Fondamenti di Node.js del percorso Node.js di Coddy. Lezione 21 di 33.

Le callback annidate sono difficili da seguire e ognuna deve ricordarsi di controllare err.

node:fs/promises restituisce invece una promise: un oggetto che rappresenta un risultato che arriverà in seguito. .then(fn) viene eseguito con il risultato, .catch(fn) viene eseguito se un passaggio precedente non è riuscito e .finally(fn) viene eseguito in entrambi i casi.

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'));

Un errore generato all'interno di .then arriva anche a .catch, quindi un solo gestore si occupa sia della lettura sia dell'analisi. Una promise che fallisce senza .catch provoca l'arresto del programma.

challenge icon

Sfida

Facile

Questo passaggio apre il progetto dello strumento da riga di comando per le note preparato per il corso, anziché i file del tuo progetto di Callbacks (incluso count.js). Il lavoro precedente rimane nella sua lezione. Leggi i file forniti prima di modificare count.js. Questa copia contiene l'esempio asincrono di conteggio delle note.

  • Riscrivi count.js usando readFile da node:fs/promises e .then.
  • Ora, se manca un file, viene stampato No notes yet, tramite un .catch.
  • Done viene ancora stampato per ultimo, tramite .finally.

Esegui node count.js, poi node count.js nothere.json.

Senza argomenti, l'output è Reading..., 2 notes, poi Done, ciascuno sulla propria riga. Con nothere.json, la riga centrale è No notes yet.

Provalo tu

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');
});

Tutte le lezioni di Fondamenti di Node.js

Esercitati da solo: Playground Express