Node.js - conceito de callbacks

O que é Callback?

O retorno de chamada é um equivalente assíncrono para uma função. Uma função de retorno de chamada é chamada na conclusão de uma determinada tarefa. O Node faz uso intenso de retornos de chamada. Todas as APIs do Node são escritas de forma que suportem callbacks.

Por exemplo, uma função para ler um arquivo pode iniciar a leitura do arquivo e retornar o controle para o ambiente de execução imediatamente para que a próxima instrução possa ser executada. Assim que a E / S do arquivo estiver concluída, ele chamará a função de retorno de chamada enquanto passa a função de retorno de chamada, o conteúdo do arquivo como um parâmetro. Portanto, não há bloqueio ou espera pela E / S do arquivo. Isso torna o Node.js altamente escalonável, pois pode processar um grande número de solicitações sem esperar que nenhuma função retorne os resultados.

Exemplo de código de bloqueio

Crie um arquivo de texto chamado input.txt com o seguinte conteúdo -

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Crie um arquivo js chamado main.js com o seguinte código -

var fs = require("fs");
var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("Program Ended");

Agora execute o main.js para ver o resultado -

$ node main.js

Verifique a saída.

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Program Ended

Exemplo de código sem bloqueio

Crie um arquivo de texto denominado input.txt com o seguinte conteúdo.

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Atualize main.js para ter o seguinte código -

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
   if (err) return console.error(err);
   console.log(data.toString());
});

console.log("Program Ended");

Agora execute o main.js para ver o resultado -

$ node main.js

Verifique a saída.

Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Esses dois exemplos explicam o conceito de chamadas bloqueadoras e não bloqueadoras.

  • O primeiro exemplo mostra que o programa bloqueia até ler o arquivo e só então prossegue para encerrar o programa.

  • O segundo exemplo mostra que o programa não espera a leitura do arquivo e passa a imprimir "Programa finalizado" e ao mesmo tempo, o programa sem bloqueio continua lendo o arquivo.

Assim, um programa de bloqueio é executado em grande parte em sequência. Do ponto de vista da programação, é mais fácil implementar a lógica, mas os programas sem bloqueio não são executados em sequência. Caso um programa necessite utilizar algum dado para ser processado, ele deve ser mantido dentro do mesmo bloco para sua execução sequencial.