Jim*_*Jim 1 javascript asynchronous angularjs
我试图循环一个对象,然后从两个服务API函数中提取每次迭代的数据,然后返回数据并使用返回的结果填充当前的迭代对象.现在,由于这些服务函数正在使用$ http对象,因此返回promises,因此我需要等待响应才能填充我的对象.
这是我第一次使用$ q AngularJS库,我不确定我是否能够以我使用它的方式使用它.它我们没有正确返回所以我认为我不是,我似乎无法让我的代码工作.
这是我的代码:
控制器功能
$scope.returnTasksAndPayments = function() {
var defer = $q.defer();
var promisesTasks = [];
var promisesPayments = [];
for(var i in $scope.projects) {
promisesTasks[i] = ProjectService.fetchTaskData($scope.projects[i].project_id);
promisesPayments[i] = ProjectService.fetchPaymentsData($scope.projects[i].project_id);
}
$q.all(promisesTasks, promisesPayments).then(function(promiseArray) {
console.log(promiseArray);
});
};
Run Code Online (Sandbox Code Playgroud)
和我的服务功能:
this.fetchProjectsData = function(options) {
return api().get("http://dashboards.blurgroup.dev/src/projectPayments/services/JSONdata.json", {
order : options.order,
page : options.page,
page_size : options.page_size,
status : options.status,
search : options.search,
assigned : options.assigned
});
};
this.fetchTaskData = function(options) {
return api().get("http://dashboards.blurgroup.dev/src/projectPayments/services/JSONdataTasks.json", {
});
};
this.fetchPaymentsData = function(options) {
return api().get("http://dashboards.blurgroup.dev/src/projectPayments/services/JSONdataPayments.json", {
});
};
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在尝试遍历我的$ scope.projects对象,为每次迭代调用两个函数并将它们放入单独的promise对象中,然后使用$ q.all来检查这两个promise对象是否已满足.
这似乎没有工作,似乎存储在$ q.all函数的'promisesPayments'数组中的数据没有被添加到$ q.all回调数组中的promiseArray变量.
任何人都可以指出我哪里出错了?谢谢
试试这个:
var promisesTasksAll = $q.all(promisesTasks);
var promisesPaymentsAll = $q.all(promisesPayments);
$q.all([promisesTasksAll, promisesPaymentsAll]).then(function(data){
//data[0] will contain promisesTasks data
//data[1] will contain promisesPayments data
});
Run Code Online (Sandbox Code Playgroud)