[英]in node.js, how to forward all events of module to another
假設我正在創建自己的模塊,該模塊位於“ net”模塊的頂部。 我的模塊有自己的事件,但也允許客戶端偵聽tcp連接發出的網絡事件:
mymod.on('myevent',...); // my event
mymod.on('connect',...); // net event
mymod.on('end',...); // net event
現在我正在做以下
...
tcp.on('connect',function(){ self.emit('connect');});
tcp.on('end',function(){ self.emit('end');});
...
我是否有一種更慣用的方式將所有事件(或事件的子集)從一個模塊轉發到另一個模塊的客戶端?
我希望這種情況總是會出現,所以我想以最干凈的方式做到這一點。
我過去所做的就是處理newListener
事件 。 在我的課程上沒有附加處理程序之前,我不會打擾。 然后,當它存在時,我將其附加到基類。
this.on('newListener', function (event, listener) {
baseClassInstance.on(event, listener);
})
您可以通過先檢查event
參數來過濾通過哪些事件。
當心是否必須刪除偵聽器。 在這些情況下,這可能不是最佳解決方案。
我從未嘗試過,目前無法測試,但是您可以嘗試以下方法;
將所有事件代理到另一個對象
tcp.emit = mymod.emit.bind(mymod);
代理事件並自行調用;
var oldEmit = tcp.emit;
tcp.emit = function() {
mymod.emit.apply(mymod, arguments);
return oldEmit.apply(this, arguments);
}
讓我知道它是否有效! 以上只是概念的證明,我沒有考慮這樣做的副作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.