有沒有方法檢查node.js中的對象是否已存在偵聽器? 我要實現以下情形:如果偵聽器尚未添加並且偵聽器處理程序是匿名函數,那麼在nodeJS中添加偵聽器
- 獲取DB
- 的對象做一些操作
- 添加聽衆如錯誤,因此,如果相同的偵聽器尚未添加[假設排水等所有的操作聆聽者操作是相同的]
我想優化添加偵聽器的方式,如果我們嘗試並添加現有的偵聽器,將不會添加新的偵聽器。節點文檔說「沒有檢查是否已經添加了監聽器。多次調用傳遞相同的eventName和listener組合將導致監聽器被多次添加和調用。」「
有辦法解決它嗎?
[編輯] -Adding一些示例代碼
connpool.getConnection(function(err, connection) {
var querystr = "Some valid SQL query";
connection.execute(querystr, data, function(err, rows) {
if (err) {
console.error(err);
}
connection.on('error', function(err){onErr(err,connection);});
do some stuff
cleanup(connection);
});
})
var onErr = function(err, connection) {
console.error({"Error message"});
connection.release();
cleanup(connection);
};
var cleanup = function(conn) {
conn.removeListener('error',onErr);
};
連接將包含一個分貝連接並從外部package.In其未來的發言connection.on( '錯誤',函數(ERR){onErr(ERR ,連接);});我使用一個匿名函數,因爲我需要傳遞一個額外的參數到清理方法。在清理過程中,我沒有得到函數的處理函數,因爲我使用的是匿名函數。
只需檢查[當前綁定到特定事件的偵聽器](https://nodejs.org/docs/latest/api/events.html#events_emitter_listeners_eventname)以查看是否存在您要添加的偵聽器。使用'emitter.listeners(eventName)'。 –
@CoolBlue:我如何檢查被util.inspect綁定的監聽器的名稱?它回送輸出爲:「添加的監聽器是[[Function], {[Function:g]監聽器:[Function]}, [功能], [功能]]」 – gkurian
只需使用對監聽器的引用函數檢查'emitter.listeners(eventName)'返回的偵聽器數組。見下面的答案... –