如何获得角度函数外的变量值

时间:2016-08-14 18:38:39

标签: javascript angularjs firebase firebase-realtime-database

我已经花了好几个小时试图理解为什么我不能在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)

看起来很傻,但我为此疯狂了。 请问有人给我一个暗示吗?

此致 维克多

1 个答案:

答案 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将始终未定义,因为它尚未分配。

编辑1

您可以使用回调函数在.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'