javascript - 延迟返回变量,直到数据从 Firebase 同步

标签 javascript angularjs loading firebase angularfire

我在应用程序中使用 Angular 和 Firebase 使用 AngularFire。我在 firebase 中存储了许多文本文档。我想获取所有这些文档并返回这些文档中所有段落的数组,以便使用 Angular 进行操作。

我创建了一项服务,它将 Firebase 中的数据与可变文档同步。该服务具有以下功能,可将其更改为段落数组。

getParas: function(){
    var paras = [];
    for(var i=0;i< documents.length;i++){
        paras = paras.concat(documents[i].text.split('\n'));
    }
    return paras;
}

但是,由于数据从 firebase 同步需要时间,因此函数会在对 paras 变量进行更改之前返回。

我尝试过使用 documents.$loaded().then(function(){... 但不确定如何从 getParas() 返回结果 函数。

我见过article ,但是过滤器似乎不是最好的选择?

谢谢

马修

最佳答案

您有两个选择。

  1. 在页面加载之前解析“documents”变量 路线。
  2. 使用 Promise,并确保“getParas”是 在数据设置为“documents”变量后调用。

下面是一个 promise 在 Controller 中完成所有操作的解决方案,您可以从此开始,然后尝试将其合并到您的服务中。

.controller("YourCtrl", ["$scope", "$q", function($scope, $q){
  var promise = getFB();
  promise.then(function(){
    afterPromise();
  })

  function getFB(){
    var documentRef = new Firebase("YOURFIREBASERURL/documents")
    var fireDataDef = $q.defer()

    documentRef.once("value", function(snapshot){
      $scope.documents = snapshot.val();
      fireDataDef.resolve();
    })
    return fireDataDef.promise;
  }
function afterPromise(){
    var $scope.paras = [];
    for(var i=0;i< $scope.documents.length;i++){
        $scope.paras = $scope.paras.concat(documents[i].text.split('\n'));
    }
  }
}]

关于javascript - 延迟返回变量,直到数据从 Firebase 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26628898/

相关文章:

Angularjs:加载 HTML 模板时的 HTTP 请求数?

javascript - AngularJS 通过 ng-click 将字符串传递给函数

angular - 为什么 LoadingController 在 API 调用期间尝试关闭它时抛出 'Overlay does not exist '

C# - 将文本文件作为类加载

javascript - 如何正确捕获 axios get 请求中的错误?

javascript - 删除index.html GWT

Angular js : how to use key of object to retrieve value of another json object

java - Android Studio加载内部存储数据错误

javascript - Canvas drawImage 在大图像上崩溃

javascript - 如何使用 Rxjs switchMap 抛出错误