Cursos / Informática para Internet / Desenvolvimento Backend / Aula

arrow_back Aula 02 - Gerenciando pacotes e fundamentos do Node.js

Execução síncrona e assíncrona


Vamos agora mostrar exemplos de operações síncronas e assíncronas para reforçar o entendimento do event loop.

Para isso, faremos um exemplo com leitura de arquivo. O Node.js permite realizar esta operação de forma assíncrona (desejável) e também de forma síncrona. Acompanhe a diferença dessas abordagens nas seções seguintes.

Leitura síncrona

Na leitura síncrona o event loop fica "preso" aguardando a leitura do arquivo terminar, para seguir adiante. Apesar da simplicidade, essa forma bloqueia o tratamento de outras requisições enquanto o Node.js estiver realizando a operação de leitura no arquivo.

const fs = require('fs')
const data = fs.readFileSync('./tmp.txt', {encoding: 'utf-8', flag: 'r'})
console.log(data)
console.log('Executou aqui!')

Leitura assíncrona

Já na forma assíncrona o event loop fica liberado para seguir adiante. Para tratar a resposta é necessário definir uma função (chamada de callback) que será chamada quando a operação de leitura finalizar.

Com isso, perceba que a impressão da mensagem "Executou aqui!" acontece provavelmente antes mesmo da leitura terminar - isso pode variar dependendo do tempo de leitura do arquivo.

const fs = require('fs')
fs.readFile('./tmp.txt', {encoding: 'utf-8', flag: 'r'}, function (err, data){
    if (!err){
        console.log(data)
    }
})
console.log('Executou aqui!')

Apesar de em primeira análise parecer mais complexo, esse tipo de uso é o que faz o Node.js ser bastante eficiente computacionalmente com pouco recurso computacional. Sendo assim, evite utilizar operações de E/S síncronas para extrair o máximo da tecnologia.


Versão 5.3 - Todos os Direitos reservados