はあなたのコードを模倣するスタンドアロンバージョンです:あなたがいることを実行する場合
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
が2回記録されていることがわかります。さらに悪いことに、より多くのメッセージをcheckcrn
に送信した場合、送信したメッセージごとに余分なエラーメッセージが表示されます。これは、checkcrn
メッセージごとに新しいerror
リスナーを追加したためです。
あなたはcheckcrn
リスナーと同じレベルにerror
リスナーの宣言を移動することによって、その問題を解決することができます
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