[英]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.