English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Função de callback do Node.js: A assincronia é um dos principais fatores que tornaram o Node.js popular. A callback é a implementação de função assíncrona. Geralmente, na Node.js, a maioria das funções de tratamento de recursos têm variantes de callback.
Quando um recurso é chamado por uma função assíncrona para uma tarefa, o controle é imediatamente passado para a próxima instrução após a função. As tarefas no recurso são iniciadas paralelamente. Isso pode ajudar O Node.js continua executando outras tarefas, enquanto essa função está usando o recurso. Assim que a tarefa que usa o recurso for concluída, o Node.js usará a função de callback para restaurar. Chama A função de callback é passada com os seguintes parâmetros: objeto de dados, objeto de resultado e (ou) objeto de erro que contém informações relacionadas à tarefa.
Função bloqueante:Em contraste com as funções assíncronas, as funções síncronas executarão um bloco até que o recurso seja concluído. Portanto, as funções síncronas também são chamadas de funções bloqueantes.
Funções de callback aninhadas do Node.js : Se várias operações forem executadas no recurso em sequência e também precisarem ser executadas de forma assíncrona, as funções de callback podem ser aninhadas.
Agora, ao ler o arquivo (tarefa) (recursos), veremos três situações em comparação com as funções assíncronas.
Exemplo de função bloqueante do Node.js
Exemplo de função de callback do Node.js
Exemplo de Função de Callback Aninhada do Node.js
A seguir está um exemplo de script Node.js que lê o arquivo sample.txt de forma síncrona.
var fs = require('fs'); // Ler o arquivo sample.txt var data = fs.readFileSync('sample.txt'); console.log("Leitura do arquivo concluída: ") + new Date().toISOString()); console.log("After readFileSync statement:") + new Date().toISOString());
Quando o programa acima for executado
Saída do Terminal
arjun@arjun-VPCEH26EN:~/nodejs$ node read-file-sync.js Leitura do arquivo concluída: 2017-10-19T12:21:40.103Z After readFileSync statement: 2017-10-19T12:21:40.105Z
A declaração after readFileSync é sempre executada após a leitura do arquivo ser concluída. fs.readFileSync bloqueia o fluxo de execução.
A seguir está um exemplo de script Node.js, que usaFunção de callback do Node.jsLer o arquivo sample.txt de forma assíncrona.
var fs = require('fs'); // Ler o arquivo sample.txt fs.readFile('sample.txt', // Função de callback chamada quando a leitura do arquivo é concluída function(err, data) { if (err) throw err; // Os dados são uma área de buffer que contém o conteúdo do arquivo console.log("Leitura do arquivo concluída: ") + new Date().toISOString()); }); console.log("Após o readFile assíncrono: "); + new Date().toISOString());
Quando o programa acima for executado
Saída do Terminal
arjun@arjun-VPCEH26EN:~/nodejs$ node read-file-async.js Após o readFile assíncrono: 2017-10-19T12:25:36.982Z Leitura do arquivo concluída: 2017-10-19T12:25:36.987Z
Pode notar que, mesmo após a execução de console.log no comando assíncrono readFile, a leitura do arquivo demora aproximadamente5milissegundos. file. fs.readFile('sample.txt', função de callback{..}) não bloqueou a execução, mas iniciou uma nova thread de controle paralela para ler o arquivo (executar tarefas de recursos).
Para demonstrar a função de callback aninhada do Node.js, consideraremos o plano de renomear o arquivo e, em seguida, usaremos uma função assíncrona para deletá-lo.
var fs = require('fs'); fs.rename('sample.txt', 'sample_old.txt', // Primeira Chamada de Retorno function (err) { if (err) throw err; console.log('Arquivo Renomeado.'); fs.unlink('sample_old.txt', // Segunda Chamada de Retorno function (err) { if (err) throw err; console.log('Arquivo Apagado.'); } ); } );
Quando o exemplo do Node.js acima for executado junto com o node
Saída do Terminal
arjun@arjun-VPCEH26EN:~/nodejs$ node nodejs-aninhado-callback.js Arquivo Renomeado. Arquivo Apagado.
Neste tutorial do Node.js – Funções de Callback do Node.js, aprendemos o fluxo de execução das funções de callback e como elas realizam operações não-bloqueantes, bem como como combinar funções de callback aninhadas com exemplos.