[Day 3] Node.js 與我 中的一開始就提到 Node.js 是事件驅動,在 Google 查「 Node event」可以發現已經有很多位前輩寫過 Event 的介紹,如:
今天就來說說 Events API 。
官方對 Event API 的介紹是「Node.js 大多數是建 築在異步事件驅動,其中有些是會週期性發出 Emit named event ( 稱 Emitters ) ,然而調整 Function 」。來看看怎麼使用用吧!
// 載入 Event Module
const EventEmitter = require('events');
// MyEmitter 繼承 Event
class MyEmitter extends EventEmitter {}
// 建立一個 Event
const myEmitter = new MyEmitter();
// 在線聆聽、等待,當 emit 發出的事件與預計收接的事件名稱相同,就做裡面的動作
// ( event.on( eventName, ([...args]) => {} ) )
myEmitter.on('event', () => {
console.log('an event occurred!');
});
// 發出 event ( event.emit( eventName[, ...args]) )
myEmitter.emit('event');
在 前言 有分享前輩們寫得相關文,裡面滿多都提到用來代替 Callback function ,但我建議 適度 ,不要使用過多。將 Event 的 emit 視為電臺廣播, on 是收音機,兩者都可以不屬於唯一,因此使用 Event 我認為要注意以下幾點:
若有需要動態加入 on 有 emitter.addListener 可以使用;要刪除 on 有 emitter.removeListener 和全刪除的 emitter.removeAllListeners 。
看似很方便、容易使用的 Event ,實際上複雜在管理 Event Name;在過往團隊開發的經驗中,仍以 Callback 、 Promise 為主,過程中極少會用到 Event 的方式處理。