创建一个承诺,使用angular factory从firebase访问多个数据点
Creating a promise for accessing multiple datapoints from firebase using angular factory
我有一个工厂,它获得一个ID数组,我使用它从firebase提取数据。
1个ID从firebase提取1条数据
我想创建一个工厂,它返回一个承诺来解析一个firebase对象数组。
下面是一个工厂的例子,它为一个数据点(从如何在Angular工厂中使用Firebase查询的解决方案中检索?)
// getLogo() returns a promise that you can bind to the UI.
// When loading finishes, the binding will get the opponent's logo value.
factory.getLogo = function (opponentName) {
var opponentsArray = $firebase(_ref.orderByChild('name').equalTo(opponentName)).$asArray();
// $loaded() returns a promise, so we can use the then() method to add
// functionality when the array finishes loading and the promise resolves.
var r = opponentsArray.$loaded().then(function () {
// Now return the logo for the first matching opponent
return opponentsArray[0].logo;
});
return r;
};
这是我尝试过的-
return function(arrIds){
var obj;
var arr = [];
var ctr = 0;
var defer = $q.defer();
if (arrIds.constructor == Array){
for (var i = 0; i < invoiceId.length; i++){
obj = $firebaseObject(ref.child('invoices').child('company').child(arrIds[i]));
obj.$loaded().then(function(){
arr.push(obj);
if (ctr === arrIds.length){
ctr++;
defer.resolve(arr);
return defer.promise;
}
})
}
}
};
您可以使用$q.all
。我用$timeout
模拟了一个异步请求,但是下面应该给你一个想法。
var app = angular.module('app', []);
app.controller('myController', function($scope, myService) {
myService.getAll([1,2,3,4,5]).then(function(results) {
$scope.results = results;
});
});
app.service('myService', function($q, $timeout) {
this.getAll = function(ids) {
var promises = [];
ids.forEach(function(id) {
promises.push(getForId(id));
});
return $q.all(promises);
};
function getForId(id) {
return $timeout(function() {
return 'Results for ' + id;
}, Math.random() * 2000);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.3/angular.min.js"></script>
<div ng-app='app' ng-controller='myController'>
<pre>{{ results | json }}</pre>
</div>
相关文章:
- jQuery从html访问数据
- 如何处理在javascript中访问数据结构的两个回调
- 无法使用变量访问数据 JSON
- nodejs API 查询如何访问数据
- 使用jquery循环表行并通过类名访问数据
- 从JavaScript对象访问数据's数组成员变量
- json访问数据未正确显示
- JSON可以't访问数据返回未定义
- AngularJS从另一个数据模型访问数据模型
- 回调访问数据
- RxJs:在flatMapMapLate之前访问数据最新
- 如何使用数据集访问数据属性值
- Chrome 扩展程序无法访问数据存储
- 角度:访问数据
- ExtJS v3 - 从表单面板内的网格面板访问数据
- 从外部 Javascript 文件访问数据
- 使用 AngularJS 从没有键值的 JSON 访问数据值
- Birt:从 beforeFactory 访问数据集的内容
- 访问数据结构中的元素
- 使用数组和对象的组合循环访问数据