Node.js 事件佇列娓娓道來
阿新 • • 發佈:2019-01-30
Node.js EventEmitter 事件佇列
Node.js 所有的非同步 I/O 操作在完成時都會發送一個事件到事件佇列。
下面我們來詳解事件佇列的方法和例項
方法:
1.addListener(event, listener)
為指定事件新增一個監聽器到監聽器陣列的尾部。
2.on(event, listener)
為指定事件註冊一個監聽器,接受一個字串 event 和一個回撥函式。
3.once(event, listener)
為指定事件註冊一個單次監聽器,即 監聽器最多隻會觸發一次,觸發後立刻解除該監聽器。
4.removeListener(event, listener)
移除指定事件的某個監聽器,監聽器 必須是該事件已經註冊過的監聽器。
5. removeAllListeners([event])
移除所有事件的所有監聽器, 如果指定事件,則移除指定事件的所有監聽器
6.setMaxListeners(n)
預設情況下, EventEmitters 如果你新增的監聽器超過 10 個就會輸出警告資訊。 setMaxListeners 函式用於提高監聽器的預設限制的數量。
7.listeners(event)
返回指定事件的監聽器陣列。
8.emit(event, [arg1], [arg2], [...])
按引數的順序執行每個監聽器,如果事件有註冊監聽返回 true,否則返回 false。
類方法
1.listenerCount(emitter , event)
返回指定事件的監聽器數量。
事件
1.newListener
event - 字串,事件名稱
listener - 處理事件函式
該事件在新增新監聽器時被觸發
2.removeListener
event - 字串,事件名稱
listener - 處理事件函式
從指定監聽器陣列中刪除一個監聽器。需要注意的是,此操作將會改變處於被刪監聽器之後的那些監聽器的索引。
案例一:每隔1s觸發事件
event1.js
// 引入 events 模組
var events = require('events');
// 建立 EventEmitter 物件
var eventEmitter = new events.EventEmitter();
// 註冊監聽器
eventEmitter.on('some_event', function () {
console.log('some_event 事件觸發');
});
// 計時器
setInterval(function () {
// 觸發 some_event 監聽器
eventEmitter.emit('some_event');
}, 1000);
案例二:向事件佇列中傳參
event2.js
var events = require('events');
var eventEmitter = new events.EventEmitter();
eventEmitter.on('listener', function (arg1, arg2) {
console.log('listener1', arg1, arg2);
})
eventEmitter.on('listener', function (arg1, arg2) {
console.log('listener2', arg1, arg2);
});
eventEmitter.emit('listener', 'zhang', 'li');
案例三:為同一個監聽器註冊兩個事件處理程式
var events = require('events');
var eventEmitter = new events.EventEmitter();
var listener1 = function (arg1, arg2) {
console.log('listener1', arg1, arg2);
};
var listener2 = function (arg1, arg2) {
console.log('listener2', arg1, arg2);
};
// 註冊監聽器
eventEmitter.on('listener', listener1);
eventEmitter.on('listener', listener2);
// 觸發監聽器事件
// eventEmitter.emit('listener', 'zhang', 'li');
var listenerLength = require('events').EventEmitter.listenerCount(eventEmitter, 'listener');
eventEmitter.emit('listener', 'zhang', 'li');
console.log('listener 監聽器註冊 ' + listenerLength + ' 個事件處理函式');