events 屬於內置模塊vue
全部能觸發事件的對象都是 EventEmitter 類的實例。node
事件的命名一般是駝峯式的字符串,但也能夠使用任何有效的 JavaScript 屬性鍵。bootstrap
EventEmitter 對象觸發一個事件時,全部綁定在該事件上的函數都會被同步地調用。 被調用的監聽器返回的任何值都將會被忽略並丟棄。api
簡單使用bash
// eventEmitter.on() 用於註冊監聽器, eventEmitter.emit() 用於觸發事件
const EventEmitter = require('events')
// EventEmitter繼承 類 events
class myEvent extends EventEmitter{}
// 實例化 myEvent
const myEventClick = new myEvent()
// 監聽myClick
myEventClick.on('myClick',()=> {
console.log('Click')
})
setInterval(() => {
// 觸發myClick
myEventClick.emit('myClick')
}, 1000)
<!--
打印
myClick
myClick
myClick
...
-->
複製代碼
傳遞參數 params
服務器
// 引入內置模塊 events
const EventEmitter = require('events')
// EventEmitter 繼承 events
class myEvent extends EventEmitter{}
// 實例化 myEvent
const ce = new myEvent()
// 監聽錯誤 傳入參數
ce.on('error', (err, time) => {
console.log(err)
console.log(time)
})
// 觸發錯誤
ce.emit('error', new Error('error111'), Date.now())
// emit首參爲觸發的函數名稱,後續參數均爲自定義參數,
/**
* Error: error111
at Object.<anonymous> (E:\***\***\$$$\api\04_events_param.js:15:18)
...
at bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)
1574242863420
*
*/
複製代碼
只觸發一次 once
平時實際項目中會遇到事件只觸發一次的狀況,使用once 便可作到。可類比與vue以及jq的once,概念大同小異函數
const EventEmitter = require('events')
// 繼承EventEmitter 類
class myEvent extends EventEmitter{}
const myEventClick = new myEvent()
// 監聽myClick
myEventClick.once('myClick',()=> {
console.log('Click')
})
setInterval(() => {
// 觸發myClick
myEventClick.emit('myClick')
}, 1000)
<!--
只打印一次
myClick
-->
複製代碼
移除事件監聽函數 removeListener
removeAllListeners
post
removeListener
移除特定函數 須要傳遞監聽事件以及對應的函數removeAllListeners
移除全部函數 只須要傳入對應的監聽事件便可const EventEmitter = require('events')
class myEvent extends EventEmitter{}
const ce = new myEvent()
// 事件1
function fn1() {
console.log('fn1')
}
// 事件2
function fn2() {
console.log('fn2')
}
// 需注意監聽同一個事件,可同時觸發多個函數
ce.on('click', fn1)
ce.on('click', fn2)
setInterval(() => {
// 觸發myClick
ce.emit('click')
}, 500)
setInterval(() => {
// 觸發myClick
ce.removeListener('click', fn2)
// 所有移除 只須要傳入監聽的事件名
// ce.removeAllListeners('click')
}, 1500)
// 打印 能夠再必定時段後再也不打印fn2,說明已經被移除監聽
/**
* fn1
* fn2
* fn1
* fn2
* fn1
* fn1
* fn1
* fn1
*/
複製代碼
close學習