Analise o trecho de código a seguir escrito em NodeJS: O que...
Analise o trecho de código a seguir escrito em NodeJS:
O que será mostrado no console JavaScript do navegador após a
execução desse trecho de código é:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
O emitter.once vai criar um listener que vai funcionar apenas uma vez. Da próxima vez que ele disparar a trigger, o listener será removido e invocado novamente.
Portanto, a primeira impressão de m será 1, e a segunda será 0.
Fonte: https://nodejs.org/api/events.html#events_emitter_once_eventname_listener
Portanto a alternativa correta é a letra A
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Alquém sabe me explicar pq ?
Pelo que entendi, o evento só é executado uma vez por causa do uso do método once no trecho
"emitter.once('event', (data) => {
console.log(++m + ":" + data)
})"
Com isso, somente a primeira chamada emitter.emit é executada, a segunda é ignorada. Então, como a variável m é inicializada com zero e também passada por parâmetro nesta chamada ("data"), no momento em que ocorre a primeira chamada emitter.emit internamente ao once o valor da variável m incrementa uma vez e concatena com seu valor passado por parâmetro, que era o valor original (zero). Assim, resulta 1:0.
Segue o link da documentação do NodeJS que trata sobre isto:
https://nodejs.org/api/events.html#events_handling_events_only_once
✅Gabarito(A)
emitter.once():
Essa callback só será chamada uma vez.
Adiciona uma função callback que será chamada quando um evento for emitido pela primeira vez depois de registrado.
Sintaxe
const EventEmitter = require('events')
const emitter= new EventEmitter()
emitter.once('my-event', () => {
// chama a função callback uma vez
})
Fonte: https://nodejs.reativa.dev/0049-node-module-events/index
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo