我有一个api:" http://me.apiary.com/1/user/ {uid}",我必须与各种uid.how并行和异步调用多次才能在角度上并行和异步调用js使用promise($ q)?我有以下代码:
Angular Factory:
angular.module('witnessApp.Service')
.factory('File',['$http', function ($http) {
var baseUrl="http://me.apiary.com";
getFileById:function(uid){
return $http({
method: 'GET',
url: baseUrl+'/1/user/'+uid
});
}
}
return {
getFileById:fileTools.getFileById,
}
}]);
角度控制器:
'use strict';
angular.module('witnessApp.Controller')
.controller('shareCtrl',['$scope','FileShare','$window','$routeParams','shareImgId','File', function ($scope,FileShare,$window,$routeParams,shareImgId,File) {
var id=$window.localStorage.id;
$scope.sharedImagesByID=[];
var uids=[1,2,3,4,5,6,7,8,9,0,11,10,12,13,14];
$scope.getFileById=function(){
for(var key in uids){
File.getFileById(uids[key])
.success(function(data, status, headers) {
$scope.sharedImagesByID.push(data.data)
})
.error(function(data, status, headers, config) {
console.error('error in loading File');
});
}
}
我尝试使用$ q.all([])。但我怎么能用$ q.all()来处理循环。我什么都没有。请问如何做到这一点? 是否可以并行地进行3次api调用。之后应该渲染该视图。并且在后台进程中再次进行3次api调用。等到最后的api电话。有可能吗?
答案 0 :(得分:2)
试试这个:
$scope.getFileById = function() {
var promises = [];
for(var key in uids) {
var promise = File.getFileById(uids[key]);
promise.success(function(data, status, headers) {
$scope.sharedImagesByID.push(data.data);
});
promise.error(function(data, status, headers, config) {
console.error('error in loading File');
});
promises.push(promise);
}
$q.all(promises);
}
定义数组,将所有承诺推送到其中,然后调用$q.all();