Menu
CoddyTech

Promise

Fa parte della sezione Fondamenti di Node.js del percorso Node.js di Coddy. Lezione 15 di 24.

Le callback annidate diventano 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 qualsiasi 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'));

Anche un errore generato all'interno di .then finisce in .catch, quindi un solo gestore copre sia la lettura sia l'analisi. Una promise che fallisce senza .catch provoca l'arresto del programma.

challenge icon

Sfida

Facile
  • Riscrivi count.js con readFile da node:fs/promises e .then.
  • Se il file manca, ora viene stampato No notes yet da un .catch.
  • Done viene comunque stampato per ultimo, da .finally.

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

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