如何处理firebase的异步snapshot.val()函数

时间:2014-10-17 07:04:12

标签: angularjs firebase angularfire

根据我的理解,Firebase的snapshot.val()函数是异步的,但我不知道如何处理/更改我的代码以解决这种情况。

简而言之,这是我的控制器的代码:

 .controller('MyController', ['$firebase', '$scope', 'authService', 'rootRef', function(authService, $firebase, $scope, rootRef) {

    var auth = authService.getCurrentUser();
    $scope.data = [];

    if (auth) {
      rootRef.on('child_added', function(snapshot) {
        console.log(snapshot.val());

        $scope.data.push(snapshot.val());
        console.log($scope.data);
      })

    };

从这段代码中,我在控制台中看到的是:

  
    

snapshot.val()的输出     $ scope.data的输出

  

但是,console.log(snapshot.val())console.log($scope.data)之间的代码似乎没有运行,因为我的$ scope.data变量没有更新

有人可以解释一下这种行为吗?

我认为这与snapshot.val()异步这一事实有关。但更重要的是,有人可以解释我如何轻松解决这个问题而不是做我在下面想到的事情。

我的解决方案:

我想出了一种让它发挥作用的方法,这是非常迂回的。我的工作是snapshot.name(),它为我提供$id或此对象的关键字。然后我用.$asObject().$loaded()对该位置进行$id调用(基本上是承诺读取该精确对象)。然后,在成功回调中,我更新$scope.data

1 个答案:

答案 0 :(得分:0)

您定义了一个名为" data"的数组。范围:

$scope.data = [];

但是你正在推动一个名为"测试"的变量。在你的onComplete回调中

$scope.testing.push(snapshot.val());