Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

Esta 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.

  1. count.js já exibe Reading... e sabe qual arquivo ler: file é a palavra digitada após node count.js, ou notes.json quando nada é digitado.
  2. Leia esse arquivo com fs.readFile e um callback. Tudo o que vem a seguir acontece dentro do callback.
  3. Se a leitura funcionar, transforme o texto em um array com JSON.parse. Exiba quantas anotações o array contém, seguido de notes. Conte as anotações no array, não as linhas do arquivo. notes.json começa com duas anotações, então você exibe 2 notes.
  4. Se a leitura falhar, ou seja, se o erro do callback não for null, exiba Cannot read seguido do nome do arquivo, em vez da contagem.
  5. Nos dois casos, exiba Done por último, também de dentro do callback.

node count.js exibe:

Reading...
2 notes
Done

node count.js nothere.json exibe:

Reading...
Cannot read nothere.json
Done

Experimente: 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.
quiz iconTeste seus conhecimentos

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