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

Ton*_*ose 13 javascript upgrade node.js socket.io

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

未捕获的TypeError:无法读取未定义的属性"apply".

我做过这样的事,

来自网络

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

聊天服务器

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

当我从客户端删除回调时,没有错误.所以我相信在回调中会有一些变化.

我收到了确认,聊天工作正常,但我担心的是控制台错误导致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];
};
Run Code Online (Sandbox Code Playgroud)

伙计们,请帮忙

Ton*_*ose 6

最后我解决了这个问题.这是我的代码中的一个错误,我在聊天服务器中完成了多个回调.像这样:

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
  })

});
Run Code Online (Sandbox Code Playgroud)

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

请看一下这个对每个nodejs开发人员都有用:http: //www.toptal.com/nodejs/top-10-common-nodejs-developer-mistakes/#remote-developer-job

谢谢你们的支持!