下面是一個獨立版本,模仿你的代碼:
const EventEmitter = require('events').EventEmitter;
let socket = new EventEmitter();
socket.on('checkcrn', function (msg) {
socket.on('error', function(err){
console.log("err + " + err);
})
console.log("message " + msg);
});
socket.emit('checkcrn', 'hello world #1');
socket.emit('checkcrn', 'hello world #2');
socket.emit('error', 'error #1');
如果您運行,你會看到err + error #1
登錄兩次。更糟糕的是:如果您發送更多checkcrn
消息,則會發送針對您發送的每條checkcrn
消息的額外錯誤消息。這是因爲您爲每個checkcrn
消息添加了一個新的error
偵聽器。
您可以通過error
聽衆的聲明移動到相同的水平checkcrn
聽衆解決這個問題:
io.on('connection', function (socket) {
socket.on('checkcrn', function (msg) {
console.log("message " + msg);
});
socket.on('error', function(err){
console.log("err + " + err);
});
});
它仍然是相同的socket
您正在收聽連接到。
至於我能理解跟蹤,他希望得到'error' * *僅在客戶端已經發送'checkcrn'後**。但你是對的 - 這種事情不應該按照這樣的方式完成。最好有一些套接字級變量來確定我們是否希望錯誤偵聽器啓動或不啓動。 –
@AndreyPopov好點,我可能誤解了。 – robertklep
這解決了我的問題,間接:) – abedzantout