Promises
Parte da seção Fundamentos de Node.js do Journey de Node.js da Coddy. Lição 21 de 33.
Callbacks dentro de callbacks ficam 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 o processamento. Uma promise que falha sem .catch encerra o programa com erro.
Desafio
FácilEsta etapa abre o projeto preparado da ferramenta de linha de comando para anotações do curso, em vez dos arquivos do seu projeto de Callbacks (incluindo count.js). Seu trabalho anterior continua na própria lição. Leia os arquivos fornecidos antes de editar count.js. Esta cópia contém o exemplo assíncrono de contagem de anotações.
- Reescreva
count.jsusandoreadFiledenode:fs/promisese.then. - Agora, um arquivo ausente imprime
No notes yet, usando um.catch. Doneainda aparece por último, usando.finally.
Execute node count.js e, em seguida, node count.js nothere.json.
Sem argumentos, a saída é Reading..., 2 notes e, depois, Done, cada um em sua própria linha. Com nothere.json, a linha do meio é No notes yet.
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
Pratique por conta própria: Playground de Express