當前位置 主頁 > 網站技術 > 代碼類 > 最大化 縮小

    node.JS事件機制與events事件模塊的使用方法詳解

    欄目:代碼類 時間:2020-02-06 15:08

    node.JS事件機制說明

    多數 Node.js 核心 API 都是采用慣用的異步事件驅動架構,其中某些類型的對象(稱為觸發器)會周期性地觸發命名事件來調用函數對象(監聽器)。例如,一個net.Server對象會在每次有新連接時觸發一個事件;一個 fs.ReadStream 會在文件被打開時觸發一個事件;一個 stream會在數據可讀時觸發事件。

    EventEmitter

    EventEmitter 類由 events 模塊定義和開放的,所有能觸發事件的對象都是 EventEmitter 類的實例

    var EventEmitter = require('events');
    /*
    { [Function: EventEmitter]
     EventEmitter: [Circular],
     usingDomains: false,
     defaultMaxListeners: [Getter/Setter],
     init: [Function],
     listenerCount: [Function] }
     */
    console.log(EventEmitter);

    events模塊的EventEmitter屬性指向該模塊本身

    var events = require('events');
    console.log(events.EventEmitter === events);//true
    EventEmitter是一個構造函數,可以用來生成事件發生器的實例emitter
    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    /*
    EventEmitter {
     domain: null,
     _events: {},
     _eventsCount: 0,
     _maxListeners: undefined }
     */
    console.log(emitter);

    方法

    emitter.emit(eventName[, ...args])

    eventName <any>

    ...args <any>

    該方法按監聽器的注冊順序,同步地調用每個注冊到名為eventName事件的監聽器,并傳入提供的參數。如果事件有監聽器,則返回true,否則返回false

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    emitter.on('test1',function(){});
    console.log(emitter.emit('test1'));//true
    console.log(emitter.emit('test2'));//false

    emitter.on(eventName, listener)

    該方法用于添加listener函數到名為eventName的事件的監聽器數組的末尾

    eventName <any> 事件名

    listener <Function> 回調函數

    [注意]不會檢查listener是否已被添加。多次調用并傳入相同的eventName和listener會導致listener被添加與調用多次

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    emitter.on('test',function(){
      console.log(1);
    });
    emitter.on('test',function(){
      console.log(2);
    });
    emitter.emit('test');//1 2

    該方法返回一個 EventEmitter 引用,可以鏈式調用

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    emitter.on('test',function(){
      console.log(1);
    }).on('test',function(){
      console.log(2);
    });
    emitter.emit('test');//1 2

    emitter.addListener(eventName, listener)

    emitter.on(eventName, listener) 的別名

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    emitter.addListener('test',function(){
      console.log(1);
    });
    emitter.emit('test');//1

    emitter.prependListener()

    與on()方法不同,prependListener()方法可用于將事件監聽器添加到監聽器數組的開頭

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    emitter.on('test',function(){
      console.log(1);
    }).prependListener('test',function(){
      console.log(2);
    });
    emitter.emit('test');//2 1

    emitter.once(eventName, listener)

教我怎样炒股