在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];
};
伙计们,请帮忙
答案 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
谢谢大家的支持!