nodejs-EventEmitter
生活随笔
收集整理的這篇文章主要介紹了
nodejs-EventEmitter
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Node.js EventEmitter
Node.js 所有的異步 I/O 操作在完成時都會發送一個事件到事件隊列。
Node.js 里面的許多對象都會分發事件:一個 net.Server 對象會在每次有新連接時觸發一個事件, 一個 fs.readStream 對象會在文件被打開的時候觸發一個事件。 所有這些產生事件的對象都是 events.EventEmitter 的實例例子----------------------------------------------------
// 引入 events 模塊
var EventEmitter = require('events').EventEmitter;
// 創建 eventEmitter 對象
var event = new EventEmitter(); event.on('some_event', function() { console.log('some_event 事件觸發');
});
setTimeout(function() { event.emit('some_event');
}, 1000);
結果.............................
some_event 事件觸發例子----------------------------------------------------
var events = require('events');
var emitter = new events.EventEmitter();
emitter.on('someEvent', function(arg1, arg2) {console.log('listener1', arg1, arg2);
});
emitter.on('someEvent', function (arg1, arg2) {console.log('listener2', arg1, arg2);
});
emitter.emit('someEvent', 'arg1', 'arg2');
結果.............................
listener1 arg1 arg2
listener2 arg1 arg2例子----------------------------------------------------
const events = require('events');
const eventEmitter = new events.EventEmitter();const listener1 = function listener1() {console.log('listener1...');
}const listener2 = function listener2() {console.log('listener2...');
}// 綁定 connection 事件,處理函數為 listener1
eventEmitter.addListener('connection', listener1);// 綁定 connection 事件,處理函數為 listener2
eventEmitter.on('connection', listener2);var eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners + " 個監聽器監聽連接事件。");// 處理 connection 事件
eventEmitter.emit('connection');// 移除監綁定的 listener1 函數
eventEmitter.removeListener('connection', listener1);
console.log("listener1 不再受監聽。");// 觸發連接事件
eventEmitter.emit('connection');eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners + " 個監聽器監聽連接事件。");console.log("程序執行完畢。");
結果.............................
2 個監聽器監聽連接事件。
listener1...
listener2...
listener1 不再受監聽。
listener2...
1 個監聽器監聽連接事件。
程序執行完畢。API----------------------------------------------------1.addListener(event, listener) 為指定事件添加一個監聽器到監聽器數組的尾部。
2.on(event, listener)為指定事件注冊一個監聽器,接受一個字符串 event 和一個回調函數。server.on('connection', function (stream) {console.log('someone connected!');});
3.once(event, listener)為指定事件注冊一個單次監聽器,即 監聽器最多只會觸發一次,觸發后立刻解除該監聽器。server.once('connection', function (stream) {console.log('Ah, we have our first user!');});
4.removeListener(event, listener) 移除指定事件的某個監聽器,監聽器必須是該事件已經注冊過的監聽器。它接受兩個參數,第一個是事件名稱,第二個是回調函數名稱。var callback = function(stream) {console.log('someone connected!');};server.on('connection', callback);// ...server.removeListener('connection', callback);
5.removeAllListeners([event])移除所有事件的所有監聽器, 如果指定事件,則移除指定事件的所有監聽器。
6.setMaxListeners(n)默認情況下, EventEmitters 如果你添加的監聽器超過 10 個就會輸出警告信息。 setMaxListeners 函數用于提高監聽器的默認限制的數量。
7.listeners(event)返回指定事件的監聽器數組。
8.emit(event, [arg1], [arg2], [...])按監聽器的順序執行執行每個監聽器,如果事件有注冊監聽返回 true,否則返回 false。類方法
1.listenerCount(emitter, event)返回指定事件的監聽器數量。events.EventEmitter.listenerCount(emitter, eventName) //已廢棄,不推薦events.emitter.listenerCount(eventName) //推薦
事件
1.newListener event - 字符串,事件名稱listener - 處理事件函數該事件在添加新監聽器時被觸發。2.removeListenerevent - 字符串,事件名稱listener - 處理事件函數從指定監聽器數組中刪除一個監聽器。需要注意的是,此操作將會改變處于被刪監聽器之后的那些監聽器的索引。補充----------------------------------------------------
大多數時候我們不會直接使用 EventEmitter,而是在對象中繼承它。包括 fs、net、 http 在內的,只要是支持事件響應的核心模塊都是 EventEmitter 的子類
?
總結
以上是生活随笔為你收集整理的nodejs-EventEmitter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nodejs-REPL/回调函数/事件循
- 下一篇: nodejs-Buffer(缓冲区)