events是node.js 最重要的模塊,events模塊只提供了一個對象events.EventEmitter,EventEmitter 的核心是事件發射與事件監聽器。
Node.js中大部分的模塊,都繼承自Event模塊。
與DOM樹上事件不同,不存在事件冒泡、逐層捕獲等行爲。
EventEmitter 支持若干個事件監聽器。當事件發射時,註冊到這個事件的事件監聽器被依次調用,事件參數作爲回調函數參數傳遞。
const events = require("events");
var ee = new events.EventEmitter();
var listener = function(arg){
console.log("觸發first事件"+arg);
}
var listener2 = function(arg){
console.log("觸發next事件"+arg);
}
ee.on("first",listener)
ee.on("next",listener2)
// emitter.once註冊監聽是一次性監聽,當觸發一次後,會移除該監聽
ee.once("once",function(arg){
console.log("觸發once事件"+arg);
})
/*emitter.removeListener的第二個參數是要移除的監聽,而非移除成功後的回調函數*/
ee.removeListener("first",listener);
ee.emit("first","aa")
/*EventEmitter.removeAllListeners([event]) 移除(批定事件)所有監聽器*/
ee.removeAllListeners("next");
/*
EventEmitter.emit(event, [arg1], [arg2], [...]) 觸發指定事件
參數1:event 字符串,事件名
參數2:可選參數,按順序傳入回調函數的參數
返回值:該事件是否有監聽
*/
var isSuccess = ee.emit("first","1次");
var isSuccess2 = ee.emit("next","2次");
var isSuccess3 = ee.emit("once","3次");
var isSuccess4 = ee.emit("once","4次");
console.log("isSuccess:"+isSuccess+",isSuccess2:"+isSuccess2+",isSuccess3:"+isSuccess3+",isSuccess4:"+isSuccess4);