簡體   English   中英

在node.js中使用事件的最佳方法

[英]Best way using events in node.js

在node.js中偵聽/啟動事件的最佳方法是哪種? 我一直在通過使用EventEmitter擴展模型來測試node.js中的事件啟動和偵聽,我想知道是否有這種方法,因為僅當存在模型實例時才偵聽事件。 如何在節點應用程序處於活動狀態時監聽事件?

使用eventEmitter擴展模型的示例。

// myModel.js

var util = require('util');
var events2 = require('events').EventEmitter;
var MyModel = function() {

        events2.call(this);
        // Create a event listener
        this.on('myEvent', function(value) {
            console.log('hi!');
        });
    };

MyModel.prototype.dummyFunction = function(params) {
// just a dummy function.

}

util.inherits(MyModel, events2);
module.exports = MyModel;

編輯:關於此問題,一個更明確的問題是:如何保持一個永久的進程,該進程在應用程序執行期間監聽事件,並且具有全局范圍(類似於正在運行的事件管理器,它監聽應用程序中產生的事件)。 是否需要在app.js中要求文件myModel.js的解決方案? 如何在node.js中解決這類問題?

我不確定您對事件的含義是什么,它僅在存在模型實例時才處於活動狀態,因為如果沒有可以監聽和響應的事件,則事件就不會發生。

話雖如此,這樣做當然是合理的:

util.inherits(global,EventEmitter)
global.on('myEvent',function(){
    /* do something useful */
});

這將使您能夠:

global.emit('myEvent')

甚至:

var ee=new EventEmitter();

ee.on('myEvent',...)

至於如何正確使用EventEmitter:它定義為

function EventEmitter() {}

它不提供初始化功能,因此足以:

var Thing=function(){};
util.inherits(Thing,EventEmitter);

這將擴展Thing的實例:

  • setMaxListeners(num)
  • emit(type,...)
  • addListener(type,listener) -別名為on()
  • once(type,listener)
  • removeListener(type,listener)
  • removeAllListeners()
  • listeners(type)

唯一可能的“陷阱”是EventEmitter將其自己的_events對象屬性添加到任何擴展對象( this ),這建議您不要使用相同的名稱來命名自己的任何對象屬性,除非出現意外行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM