为什么在以下代码段中无法访问中的变量值
Why the variable value from is not accessible in following code snippet?
我有以下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
,我在哪里显示了警报。
有人能帮我访问值并显示警报吗?
谢谢。
当回调函数(function(snapshot){ ... }
)尚未调用时,将执行最终的alert
。请注意,回调函数是异步调用的,因此它只有在当前运行的代码完成并触发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....
}
一些改进建议
不要使用太多全局变量(在代码中,所有全局变量都是全局的),而是将变量作为函数参数传递。
你可能想看看承诺。
相关文章:
- JavaScript:单击时相对于父级增加变量值
- 为什么在以下代码段中无法访问中的变量值
- 如何访问具有变量值的对象
- 使用 gulp 访问打字稿文件变量值
- 如何访问.net MVC3中javascript函数中的c#变量值
- JS:我如何访问一个函数内的变量值,而另一个函数内部的变量值,并且两个函数属于同一个对象
- 如何在函数外部访问 Javascript 变量值
- 使用变量名称字符串 - JavaScript 访问变量值
- 使用 javascript 动态访问变量值
- 从页面访问变量值(循环.aspx.cs 到 Java 脚本
- 在AngularJS中的$http成功回调之外无法访问$scope变量值
- 如何访问ajax代码中的javascript变量值
- PHP访问会话变量值在HTML代码中
- 访问php中的JavaScript变量值以存储在mysql中
- 在Angular 2组件中使用javascript访问Typescript变量值
- 在PHP中访问JS函数中的局部变量值
- 我如何在我的qt代码访问javascript变量值
- 如何从jstl foreach到jQuery访问变量值
- 访问JavaScript函数中的Java变量值
- 如何访问脚本标签之外的Javascript变量值