socket.on 调用它的回调太多次

Posted

技术标签:

【中文标题】socket.on 调用它的回调太多次【英文标题】:socket.on calls its callback too many times 【发布时间】:2013-08-13 00:36:30 【问题描述】:

在第一次点击时,我的客户会输出这个:

Object hello: "world" 

然后在第二次点击时:

Object hello: "world"
Object hello: "world" 

随着后续的点击,点击输出行的次数增加一。

客户

var socket = io.connect('http://localhost');

$(document).on('click' , '#test', function()
    socket.emit('news',  my: 'data' );
    socket.on('news', function (data) 
        console.log(data);
    );
);

服务器

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')

io.sockets.on('connection', function (socket) 
socket.on('news', function (data) 
    socket.emit('news',  hello: 'world' );
    console.log(data);
);
);

【问题讨论】:

【参考方案1】:

每次触发 click 事件处理程序时,您都会绑定一个新的事件处理程序。在回调之外绑定一次:

var socket = io.connect('http://localhost');

socket.on('news', function(data) 
    console.log(data);
);

$(document).on('click', '#test', function() 
    socket.emit('news', 
        my: 'data'
    );
);

【讨论】:

哦,谢谢,如果我需要在我的函数中使用套接字,但我有 var 吗?示例 $(document).on('click' , '#test', function() var id = $(this).id; //// 我在 socket.emit('news', my: 'data', myId : id ); socket.on('news', function (data) console.log(data); ); );从服务器创建回调?

以上是关于socket.on 调用它的回调太多次的主要内容,如果未能解决你的问题,请参考以下文章

BLoC:多次调用监听回调

使用 forEach 时避免回调多次调用

多次调用 Cakephp 回调函数

如何修复“多次调用写回调”

我应该在哪里调用 socket.on ?

运行 npm install 时多次调用回调