将多个承诺传递给 $q.all 无效。
Pass multiple promises to $q.all not working.
我正在尝试遍历一个对象,然后从两个服务 API 函数中为每次迭代提取数据,然后这些函数将 return 数据并用结果填充我当前的迭代对象return编辑。现在,由于这些服务功能正在使用 $http 对象,所以承诺是 returned,因此我需要等待响应才能填充我的对象。
这是我第一次使用 $q AngularJS 库,我不确定我是否能够按照我使用它的方式使用它。我们没有 return 正确,所以我假设我没有,而且我似乎无法让我的代码工作。
这是我的代码:
控制器功能
$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);
});
};
和我的服务功能:
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", {
});
};
如您所见,我正在尝试遍历我的 $scope.projects 对象,为每次迭代调用这两个函数并将它们放入单独的 promise 对象中,然后使用 $q.all 进行检查这两个承诺对象已实现。
这似乎没有正常工作,而且存储在 $q.all 函数的 'promisesPayments' 数组中的数据似乎没有被添加到 $ q.all 回调数组。
谁能指出我哪里出错了?
谢谢
尝试 concatenating 将您的两个数组合并为一个大数组并将其传递给 $q.all() 。
或者如果您需要分离返回的数据,嵌套您的解决方案,
$q.all(promisesTasks).then(function(promiseTaskData) {
console.log(promiseTaskData);
$q.all(promisesPayments).then(function(promisePaymentsArray) {
console.log(promisePaymentsArray);
});
});
$q.all(promisesTasks, promisesPayments)
是嵌套数组 [[],[]]
,$q.all() 不喜欢
试试这个:
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
});
我正在尝试遍历一个对象,然后从两个服务 API 函数中为每次迭代提取数据,然后这些函数将 return 数据并用结果填充我当前的迭代对象return编辑。现在,由于这些服务功能正在使用 $http 对象,所以承诺是 returned,因此我需要等待响应才能填充我的对象。
这是我第一次使用 $q AngularJS 库,我不确定我是否能够按照我使用它的方式使用它。我们没有 return 正确,所以我假设我没有,而且我似乎无法让我的代码工作。
这是我的代码:
控制器功能
$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);
});
};
和我的服务功能:
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", {
});
};
如您所见,我正在尝试遍历我的 $scope.projects 对象,为每次迭代调用这两个函数并将它们放入单独的 promise 对象中,然后使用 $q.all 进行检查这两个承诺对象已实现。
这似乎没有正常工作,而且存储在 $q.all 函数的 'promisesPayments' 数组中的数据似乎没有被添加到 $ q.all 回调数组。
谁能指出我哪里出错了? 谢谢
尝试 concatenating 将您的两个数组合并为一个大数组并将其传递给 $q.all() 。
或者如果您需要分离返回的数据,嵌套您的解决方案,
$q.all(promisesTasks).then(function(promiseTaskData) {
console.log(promiseTaskData);
$q.all(promisesPayments).then(function(promisePaymentsArray) {
console.log(promisePaymentsArray);
});
});
$q.all(promisesTasks, promisesPayments)
是嵌套数组 [[],[]]
,$q.all() 不喜欢
试试这个:
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
});