NodeJs簡明教程將從零開始學習NodeJs相關知識,助力JS開發者構建全棧開發技術棧!微信
本文是NodeJs簡明教程的第七篇,將介紹NodeJs events模塊相關的基本操做。架構
大多數 Node.js 核心 API 構建於慣用的異步事件驅動架構,其中某些類型的對象(又稱觸發器,Emitter)會觸發命名事件來調用函數(又稱監聽器,Listener)。異步
使用事件監聽器通常包含如下操做:函數
const EventEmitter = require('events'); // 引用模塊
class MyEmitter extends EventEmitter {} // 初始化監聽器
const myEmitter = new MyEmitter();
myEmitter.on('event', () => { // 設置監聽函數
console.log('an event occurred!');
});
myEmitter.emit('event'); // 觸發事件
複製代碼
以上例程會輸出an event occurred!
學習
上文中的監聽方式事件觸發幾回
就會輸出幾回an event occurred!
,有些事件多是一次性的。這時候能夠使用once
監聽。ui
const EventEmitter = require('events'); // 引用模塊
class MyEmitter extends EventEmitter {} // 初始化監聽器
const myEmitter = new MyEmitter();
myEmitter.once('event', () => { // 設置監聽函數
console.log('an event occurred!');
});
myEmitter.emit('event'); // 觸發事件
myEmitter.emit('event'); // 觸發事件
複製代碼
以上例程會輸出1次
an event occurred!
;spa
上文中的監聽方式都是隻有1個
監聽函數,經過屢次調用on
能夠設置多個監聽函數。code
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.once('event', () => { // 監聽器1
console.log('監聽器1收到事件');
});
myEmitter.on('event', () => { // 監聽器2
console.log('監聽器2收到事件');
})
myEmitter.emit('event'); // 觸發事件
複製代碼
以上例程會輸出cdn
監聽器1收到事件
監聽器2收到事件
複製代碼
emit
函數的第一個值爲事件名
,後續參數爲事件值
on
和once
等監聽器設置函數的回調函數收到的值爲emit傳入的事件參數
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.once('event', (param1,param2,param3) => { // 接收事件參數
console.log('收到事件',param1,param2,param3);
});
myEmitter.emit('event','參數1','參數2',{name:'參數3'}); // 發送事件參數
複製代碼
以上例程會輸出對象
收到事件 參數1 參數2 { name: '參數3' }
複製代碼
使用eventNames()實例方法
獲取監聽器上全部事件
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.once('event', (param1,param2,param3) => {
console.log('收到事件',param1,param2,param3);
});
myEmitter.once('event2',() => {
console.log('收到事件2');
});
console.log(myEmitter.eventNames());
複製代碼
以上例程輸出[ 'event', 'event2' ]
使用off實例方法
移除單個監聽器
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
const callback = (param1) => {
console.log(param1);
};
myEmitter.on('event', callback); // 添加監聽器
myEmitter.off('event', callback); // 移除監聽器
myEmitter.emit('event'); // 觸發事件
複製代碼
以上例程沒有輸出
,由於先添加監聽器,隨後移除,觸發事件時已經沒有可用的監聽器了
使用removeAllListeners([eventName])實例方法移除全部監聽器
。
不傳參數
時移除該emitter實例
上全部
事件監聽器字符串
參數時移除該emitter實例
上全部該事件
的監聽器事件系統是NodeJs的靈魂,在幾乎全部的I/O模塊都有使用,但願各位讀者好好掌握。事件模塊讀後有疑問請加微信羣討論。