簡體   English   中英

在node.js中,如何將模塊的所有事件轉發到另一個

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

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