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

时间:2015-04-29 06:25:10

标签: javascript node.js socket.io upgrade

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

  

未捕获的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});
});

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

我收到确认并且聊天工作正常,但我担心的是导致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];
};

伙计们,请帮忙

1 个答案:

答案 0 :(得分: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
  })

});
  

在以前的版本中它是一个警告,现在是一个错误!!就是这样。 因此请避免多次回调

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

谢谢大家的支持!