Menu
CoddyTech

Promises

Parte da seção Fundamentos de Node.js do Journey de Node.js da Coddy. Lição 15 de 24.

Callbacks dentro de callbacks são difíceis de acompanhar, e cada um precisa se lembrar de verificar err.

node:fs/promises retorna uma promise: um objeto que representa um resultado que chega mais tarde. .then(fn) é executado com o resultado, .catch(fn) é executado se alguma etapa anterior falhar, e .finally(fn) é executado de qualquer maneira.

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

Um erro lançado dentro de .then também chega a .catch, então um único manipulador cobre a leitura e a análise. Uma promise que falha sem .catch encerra o programa com erro.

challenge icon

Desafio

Fácil
  • Reescreva count.js usando readFile de node:fs/promises e .then.
  • Agora, um arquivo ausente exibe No notes yet, a partir de um .catch.
  • Done ainda aparece por último, a partir de .finally.

Execute node count.js e, em seguida, node count.js nothere.json.

Experimente você mesmo

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 as lições de Fundamentos de Node.js