首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将多个承诺传递给$q.all不起作用。

将多个承诺传递给$q.all不起作用。
EN

Stack Overflow用户
提问于 2015-05-01 15:56:06
回答 2查看 2.2K关注 0票数 1

我试图循环一个对象,然后从两个服务API函数中提取每个迭代的数据,然后返回数据并用返回的结果填充当前的迭代对象。现在,由于这些服务函数使用的是$http对象,所以将返回承诺,因此我需要等待响应才能填充对象。

这是我第一次使用$q AngularJS库,我不确定我是否能够以使用它的方式使用它。它没有正确地返回,所以我假设我没有,我似乎不能让我的代码工作。

这是我的代码:

控制器功能

代码语言:javascript
代码运行次数:0
运行
复制
$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);
                });
            };

我的服务职能是:

代码语言:javascript
代码运行次数:0
运行
复制
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对象,为每次迭代调用这两个函数,并将它们放入单独的允诺对象中,然后使用$q.all来检查这两个承诺对象是否已经实现。

这似乎不像应该的那样工作,而且似乎存储在$q.all函数中的‘$q.all’数组中的数据没有添加到$q.all回调数组中的promiseArray变量中。

有人能指出我哪里出了问题吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-01 16:22:59

试试这个:

代码语言:javascript
代码运行次数:0
运行
复制
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    
});
票数 5
EN

Stack Overflow用户

发布于 2015-05-01 16:10:20

尝试将两个数组合并到一个大数组中,并将其传递给串接 ()。

或者如果你需要分离回来的数据,嵌套你的解决方案,

代码语言:javascript
代码运行次数:0
运行
复制
$q.all(promisesTasks).then(function(promiseTaskData) {
    console.log(promiseTaskData);
    $q.all(promisesPayments).then(function(promisePaymentsArray) {
        console.log(promisePaymentsArray);
    });
});

$q.all(promisesTasks, promisesPayments)是一个嵌套数组[[],[]],$q.all()不喜欢它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29990378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档