我已经花了好几个小时试图理解为什么我不能在Angular.js函数之外得到变量的值。首先,我从Firebase数据库中获取值,这是我的参考:
var refspaedtServ = new Firebase(FBURLSPA + $routeParams.id);
$scope.spaedServ = $firebaseObject(refspaedtServ);
然后我有了这个功能:
///// IMAGE REFERENCE ////
var lafoto = '';
refspaedtServ.on("value", function(rootSnapshot) {
lafoto = rootSnapshot.val().foto;
console.log("Inside image ", lafoto)
});
正如您所看到的,我定义了我的变量' lafoto'全球化 使用console.log Inside image,我可以看到值是正确的
但是当我试图获得" lafoto"的价值时变量,在函数之外,我得到" undefined",我的意思是没有价值。
console.log("Outside Image ", lafoto)
看起来很傻,但我为此疯狂了。 请问有人给我一个暗示吗?
此致 维克多
答案 0 :(得分:2)
这很简单,让我们通过您的代码看到它,假设您在'value'事件中的函数需要1500ms来完成:
var lafoto = '';
console.log('start');
//listening for the event
refspaedtServ.on("value", function(rootSnapshot) {
//after ~1500ms...
lafoto = rootSnapshot.val().foto;
console.log("Inside", lafoto)
});
console.log('outside', lafoto); //executed immediately
在控制台中,您将收到以下结果:
'Start'
'outside'
'inside'
那是因为您正在等待事件的异步:因此,在.on函数“之外”,您正在内部代码之前执行代码。
因此,您的变量lafoto将始终未定义,因为它尚未分配。
您可以使用回调函数在.on事件后执行代码:
var lafoto = '';
console.log('start');
//listening for the event
refspaedtServ.on("value", function(rootSnapshot) {
//after ~1500ms...
lafoto = rootSnapshot.val().foto;
console.log("Inside", lafoto)
myAfterFunction();
});
function myAfterFunction(){
console.log('myAfterFunction', lafoto);
}
console.log('outside', lafoto); //executed immediately
在控制台中,您将收到以下结果:
'Start'
'outside'
'inside'
'myAfterFunction'