Menu
CoddyTech

Promises

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

Las devoluciones de llamada dentro de otras devoluciones de llamada son difíciles de seguir, y cada una debe acordarse de 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 falla algún paso anterior y .finally(fn) se ejecuta en ambos casos.

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 controlador cubre la lectura y el análisis. Una promesa que falla sin .catch bloquea el programa.

challenge icon

Desafío

Fácil

Este paso abre el proyecto preparado de la herramienta de línea de comandos para notas del curso, en lugar de los archivos de tu proyecto de Callbacks (incluido count.js). Tu trabajo anterior permanece en su propia lección. Lee los archivos proporcionados antes de editar count.js. Esta copia contiene el ejemplo asíncrono de recuento de notas.

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

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

Sin argumentos, la salida es Reading..., 2 notes y después Done, cada uno en su propia línea. Con nothere.json, la línea del medio es No notes yet.

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

Practica por tu cuenta: Playground de Express