我需要在客户端从服务器获取信息。 所以在服务器端,当客户端第一次连接时我得到了这个:
socket.on('adduser', function(username){
// misc code, where i set num_player and whatnot
socket.emit('confirmauth', socket.id, socket.num_player, function(data){
console.log(data)
});
// code
}
在客户端我得到了这个:
var current_player;
socket.on('confirmauth', function(id, username, num, callback) {
current_player = new Player(username,id, num);
console.log(current_player.id); // works
console.log(current_player.num); //works
callback('ok i got it');
});
console.log(current_player.id); //undefined
console.log(current_player.num); //undefined
我的问题是在套接字之外,播放器未定义。看来 javascript 不会等待我的套接字在继续之前检索数据。
完成后,我尝试将 socket.on 包装在 $. 中,但它不起作用。我尝试进行回调,但我想我可能不太了解它应该如何工作。所以如果你们中有人愿意帮助我,我将不胜感激
感谢您的回答。
最佳答案
如果您将 current_player
变量放在 on
回调之外以试图返回
它,另一种方法是创建您自己的函数接收回调
function getPlayer(onDone){
socket.on('confirmauth', function(id, username, num, callback) {
var current_player = new Player(username,id, num);
onDone(current_player);
});
}
而不是做
var player = getPlayer();
//...
你会
getPlayer(function(player){
//...
});
“回调性”在 Javascript 中有点传染性,这有点糟糕,但在每个人开始使用生成器之前,生活就是这样。
关于JavaScript、node.js 在继续之前等待 socket.on 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23815500/