Menu
CoddyTech

Promesas

Parte de la sección Conceptos básicos de Node.js del Journey de Node.js de Coddy. Lección 15 de 24.

Los callbacks dentro de otros callbacks son difíciles de seguir, y cada uno debe recordar comprobar err.

node:fs/promises devuelve una promesa: un objeto que representa un resultado que llega más tarde. .then(fn) se ejecuta con el resultado, .catch(fn) se ejecuta si algún paso anterior falló y .finally(fn) se ejecuta en cualquier caso.

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 error lanzado dentro de .then también llega a .catch, así que un solo manejador cubre la lectura y el análisis. Una promesa que falla sin .catch hace que el programa se bloquee.

challenge icon

Desafío

Fácil
  • Reescribe count.js con readFile de node:fs/promises y .then.
  • Ahora, si falta un archivo, se imprime No notes yet desde un .catch.
  • Done sigue apareciendo al final, desde .finally.

Ejecuta node count.js y después node count.js nothere.json.

Pruébalo tú mismo

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

Todas las lecciones de Conceptos básicos de Node.js