Compreendendo process.nextTick()
Ao tentar entender o loop de eventos do Node.js, uma parte importante dele é process.nextTick()
. Cada vez que o loop de eventos completa um ciclo, chamamos isso de tick.
Quando passamos uma função para process.nextTick(), instruímos o mecanismo a invocar essa função no final da operação atual, antes do início do próximo tick do loop de eventos:
process.nextTick(() => {
// faça algo
})
O loop de eventos está ocupado processando o código da função atual. Quando esta operação termina, o mecanismo JS executa todas as funções passadas para as chamadas nextTick
durante essa operação.
É a maneira como podemos dizer ao mecanismo JS para processar uma função assincronamente (após a função atual), mas o mais rápido possível, sem colocá-la em fila.
Chamar setTimeout(() => {}, 0)
executará a função no final do próximo tick, muito mais tarde do que ao usar nextTick()
, que prioriza a chamada e a executa imediatamente antes do início do próximo tick.
Use nextTick()
quando quiser garantir que na próxima iteração do loop de eventos esse código já seja executado.
Um exemplo da ordem dos eventos:
console.log('Olá => número 1')
setImmediate(() => {
console.log('Rodando antes do timeout => número 3')
})
setTimeout(() => {
console.log('O timeout rodando por último => número 4')
}, 0)
process.nextTick(() => {
console.log('Rodando no próximo tick => número 2')
})
Saída de exemplo:
Olá => número 1
Rodando no próximo tick => número 2
Rodando antes do timeout => número 3
O timeout rodando por último => número 4
A saída exata pode diferir de execução para execução.