use*_*823 4 javascript sockets wait node.js
我需要从客户端的服务器获取信息。所以在服务器端,当客户端第一次连接时我得到了这个:
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
}
Run Code Online (Sandbox Code Playgroud)
在客户端我得到了这个:
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
Run Code Online (Sandbox Code Playgroud)
我的问题是在套接字之外,没有定义播放器。似乎 javascript 不会等待我的套接字在继续之前检索数据。
我试图将 socket.on 包装在 $.when 中,但它不起作用。我试图做一个回调,但我想我可能不太了解它应该如何工作。所以如果你们中的一个愿意帮助我,我将不胜感激
谢谢您的回答。
如果您将current_player变量放在on回调之外以尝试使用return它,另一种方法是让您自己的函数接收回调
function getPlayer(onDone){
socket.on('confirmauth', function(id, username, num, callback) {
var current_player = new Player(username,id, num);
onDone(current_player);
});
}
Run Code Online (Sandbox Code Playgroud)
而不是做
var player = getPlayer();
//...
Run Code Online (Sandbox Code Playgroud)
你做
getPlayer(function(player){
//...
});
Run Code Online (Sandbox Code Playgroud)
“回调”在 Javascript 中有点传染性,这有点糟糕,但在每个人都开始使用生成器之前,这就是生活。
| 归档时间: |
|
| 查看次数: |
6094 次 |
| 最近记录: |