[英]Events & Event Emitter in Node.js
const events = require('events');
const eventEmitter = new events.EventEmitter();
eventEmitter.on('scream', function() {
console.log("Screaming");
});
eventEmitter.on('scream', function(name) {
console.log(name+" is screaming");
});
eventEmitter.emit('scream', 'Bob');
O / P:尖叫
鮑勃在尖叫
因為Event循環從事件隊列中提取事件並將它們逐個發送到調用堆棧。
事件隊列是FIFO(先進先出)
因為在nodejs中,事件循環是單線程的,並且一次選擇一個事件並獨立地處理這些事件。
在您的情況下,有兩個具有相同名稱的事件處理程序,因此當事件循環獲取eventEmitter.emit('scream', 'Bob')
它會發送特定的事件處理程序。 當第一個事件處理程序完成它時,現在它轉到第二個處理程序因為具有相同的名稱。 它遵循FIFO,但如果你使用emitter.prependListener(eventName, listener)
那么它將首先執行FIFO。
你應該知道 ,如果你只想打電話一次,你應該使用eventEmitter.once('scream')
它只會被調用一次。
eventEmitter.once('scream', function() {
console.log("Screaming");
});
eventEmitter.emit('scream', 'Bob');
eventEmitter.emit('scream', 'Bob');
eventEmitter.emit('scream', 'Bob');
Output: Screaming // Only one time.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.