在将0.9.16升级到1.3.5时,SocketIO发出callback失败

在0.9.16中,我使用socket.emit与callback,以便聊天服务器返回一些数据,我可以根据确认处理结果。 但升级到1.3.5后,我发现这样的控制台错误

Uncaught TypeError:无法读取未定义的属性'apply'。

我做了这样的事情

从网页

socket.emit('userToUser', { 'usename': 'John', 'message': 'hi' }, function(callback){ //callback handled }); 

聊天服务器

 socket.on('userToUser', function(content, callback){ //do something if(callback) return callback({'result':'success', 'messageid':content.messageid, 'chatid':content.chatid}); }); 

当我从客户端删除callback,没有错误。 所以我相信callback中会有一些变化。

我得到的确认和聊天工作正常,但我关心的是控制台错误导致socketio.js

 Socket.prototype.onack = function(packet){ debug('calling ack %s with %j', packet.id, packet.data); var fn = this.acks[packet.id]; fn.apply(this, packet.data); delete this.acks[packet.id]; }; 

伙计们,请帮忙

最后我已经解决了这个问题。 这是我的代码错误,我已经在聊天服务器上做了多个callback。 喜欢这个:

 socket.on('userToUser', function(content, callback){ mysql.insertChat(content, function(err, data){ return callback({'result':'1'}) //first callback }) sendToUser(content, function(errm successData){ return callback({'result':'success','chatid':content.chatid}); //second callback ->wrong }) }); 

在以前的版本中,它是一个警告,现在它是一个错误! 而已。 所以请避免多个callback

请看看这个,可能对每个nodejs开发者都有用: http : //www.toptal.com/nodejs/top-10-common-nodejs-developer-mistakes/#remote-developer-job

感谢球员upvoting!

编辑: 这不是如何使用socket.io v1.3.5callback工作。 事实上,emit函数根本不接受任何callback。

我猜你想发送一个确认, 发送节点 ,其消息已收到。 要做到这一点,你需要从服务器(在服务器上,套接字variables表示连接到networking中的特定节点 ,而在客户端上,套接字variables表示连接到服务器 )另一个socket.emit调用。 因此,在客户端,您需要使用socket.on来处理确认,这是您将回拨的位置。

要将确认广播到networking中的所有节点,您应该使用io.emit

使用socket.io的聊天应用程序的代码示例可以在这里find 。