我关注了Javascript代码段:
authData=ref.getAuth();
if(authData == null){
//TODO find an elegant way to manage authorization
// window.location = "../index.html";
} else {
ref.child("users").child(authData.uid).on("value", function(snapshot){
$( "span.user-name").html(snapshot.val().displayName);
loggedInUser.displayName = snapshot.val().displayName;
//alert("Name inside : "+loggedInUser.displayName);
//Here it displays the value
});
}
alert("Nameada is out : "+loggedInUser.displayName);
//Here it shows 'undefined'
为什么吗
我想使用变量值loggedInUser.displayName
我在哪里显示警报。
有人可以帮助我访问该值并显示警告吗?
感谢。
答案 0 :(得分:4)
当尚未调用回调函数(alert
)时,将执行最终的function(snapshot){ ... }
。请注意,回调函数是异步调用的,因此只有在当前运行的代码完成且触发value
事件后才会执行。
这也解释了为什么内部(注释掉的)alert
确实有效。只是意识到这段代码(回调函数)比其他alert
稍后执行,即使它出现在代码的前面。
你可以解决"它通过在回调中调用另一个函数,如下所示:
authData=ref.getAuth();
if(authData == null){
//TODO find an elegant way to manage authorization
// window.location = "../index.html";
} else {
ref.child("users").child(authData.uid).on("value", function(snapshot){
$( "span.user-name").html(snapshot.val().displayName);
loggedInUser.displayName = snapshot.val().displayName;
whenUserLogged();
});
}
function whenUserLogged() {
alert("Name : "+loggedInUser.displayName);
// anything else you want to do....
}
不要使用too many global variables(在您的代码中,所有这些都是全局的),而是将变量作为函数参数传递。
您可能需要查看promises。