Callbacks
Parte da seção Fundamentos de Node.js do Journey de Node.js da Coddy. Lição 18 de 33.
Ler um arquivo grande leva tempo, e um programa que fica esperando por ele não faz mais nada enquanto isso.
fs.readFile(path, 'utf8', callback) inicia a leitura e retorna imediatamente. Quando o arquivo é carregado, o Node chama seu callback com (err, text). err é null em caso de sucesso e contém um erro caso contrário, então verifique-o primeiro. Tudo o que precisa do texto deve ficar dentro do callback.
import fs from 'node:fs';
fs.readFile('poem.txt', 'utf8', (err, text) => {
if (err) {
console.log('No poem today');
return;
}
console.log(text.split('\n').length + ' lines');
});
console.log('Asked for the poem');Asked for the poem é exibido primeiro: a linha após readFile é executada enquanto o arquivo ainda está sendo carregado.
Desafio
FácilEsta lição abre um novo exemplo de contagem com callback em count.js, em vez dos arquivos da sua ferramenta de anotações da lição Tratamento de erros. Os arquivos fornecidos notes.json, notes.js e store.js estão incluídos; seu trabalho anterior continua salvo na própria lição.
Ler um arquivo grande leva tempo. Com um callback, o Node pode fazer outras tarefas enquanto isso e chama seu código de volta quando o arquivo está pronto. Pratique isso em um pequeno programa separado, count.js, que conta as anotações em um arquivo.
count.jsjá exibeReading...e sabe qual arquivo ler:fileé a palavra digitada apósnode count.js, ounotes.jsonquando nada é digitado.- Leia esse arquivo com
fs.readFilee um callback. Tudo o que vem a seguir acontece dentro do callback. - Se a leitura funcionar, transforme o texto em um array com
JSON.parse. Exiba quantas anotações o array contém, seguido denotes. Conte as anotações no array, não as linhas do arquivo.notes.jsoncomeça com duas anotações, então você exibe2 notes. - Se a leitura falhar, ou seja, se o erro do callback não for
null, exibaCannot readseguido do nome do arquivo, em vez da contagem. - Nos dois casos, exiba
Donepor último, também de dentro do callback.
node count.js exibe:
Reading...
2 notes
Donenode count.js nothere.json exibe:
Reading...
Cannot read nothere.json
DoneExperimente: esta lição executa count.js, então o terminal mostra $ node count.js. Pressione Executar com a caixa vazia, e o programa lê notes.json. Em seguida, digite nothere.json na caixa e pressione Enter para tentar ler um arquivo que não existe.
Experimente você mesmo
import fs from 'node:fs';
const file = process.argv[2] ?? 'notes.json';
console.log('Reading...');
// Leia o arquivo com fs.readFile e uma função de callback.
// Imprima o número de notas e, em seguida, Done.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos de Node.js
Pratique por conta própria: Playground de Express