node核心模組

redhack發表於2018-02-04
  1. Events模組簡介 node的特性:單執行緒 非同步 非阻塞I/O 基於事件驅動的執行在伺服器端輕量、高效的指令碼語言; Events模組是nodejs的核心模組,是node實現事件驅動的基礎,node中幾乎所有的模組(如http, fs等)都繼承該模組; Events模組實現了事件註冊,通知等功能,是觀察者模式(事件釋出/訂閱模式)的實現; 只要繼承EventEmitter類,就可擁有事件註冊、觸發事件等,所有能觸發事件的物件都是EventEmitter類的例項, 例如: net.Server 物件會在每次有新連線時觸發事件; fs.ReadStream 會在檔案被開啟時觸發事件; 流物件 會在資料可讀時觸發事件; 建立一個新類, 使支援 EventEmitter 事件 eg1: 藉助util模組 let EventEmitter = require('events'); let util = require('util'); function WriteStream () { EventEmitter.call(this); //繼承私有屬性 } util.inherits(WriteStream, EventEmitter); //原型繼承,繼承公有 /**
    • 定義一個WriteStream類,把EventEmitter類的方法新增到新建立的WriteStream 類中,使WriteStream的例項具有EventEmitter的方法。
    • 相當於:
    • Object.setPrototypeOf(ctor.prototype, superCtor.prototype); //指定的物件的原型
    • ctor.prototype.proto = superCtor.prototype; */ eg2: 藉助es6 extends方法 const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); myEmitter.on('event', () { console.log('觸發了一個事件了'); }); myEmitter.emit('event'); //觸發事件 當我們訂閱了'event'事件後,可以在任何地方通過emit('event')來執行事件回撥; 相關api:
  2. 匯入模組(建立emitter例項) var EE = require('events'); //events模組只提供了一個EventEmitter類,所以返回的就是EventEmitter
  3. 註冊繫結事件 EE.addListener(event, listener); EE.on(event, listener); //相當於增加觀察者,addListener和on這兩個方式作用是一樣的 EE.once(event, listener); //繫結的事件監聽器只會執行一次,然後就會被刪除掉 //新增了任意的監聽函式時會觸發newListener EE.on('newListener', (type, listener) => { }); EE.on('removeListener');
  4. 觸發事件 EE.emit(event);
  5. 移除事件 EE.removeListener(event, listener); EE.removeAllListeners([event]); //移除所有
  6. 其它api EE.setMaxListeners(n); //設定同一事件的監聽器最大繫結數,預設情況下,超過10個就會警告;設定為0,是無限制; EE.listenerCount() //檢視事件監聽器數量

相關文章