使用带有多个$ http.get的服务中的promise的promise

时间:2015-11-24 10:52:02

标签: javascript angularjs http-get angular-promise

我搜索过高低,但我似乎无法围绕q.defer()并创建我自己的承诺。

我有一个服务getDataService,它可以完全从REST服务器获取$http.gets数据。但是,每次只能发送一个变量,因此如果用户想要查询服务器两个实体并返回整个关联数据,则必须发送两个请求。因此我不得不使用一种方法,将i作为实际计数(闭包),然后运行我的获取数据函数适当的次数:

keepICorrect: function (security) {
        var self = this;
        for (var i = 0 ; i < entity.length; i++) {
            self.getDataFromREST(security, i);
        }
    },

我从主控制器那里称之为承诺:

$scope.apply = function (security) {

    var myDataPromise = getDataService.keepICorrect(security);
    myDataPromise.then(function () {

//DO STUFF

        }, 1);
    }, function (error) {
        alert("Error Retrieving Data");
        return $q.reject(error);
    });
}

这在使用.getDataFromREST()时起作用,但显然现在没有,因为我必须通过我的新循环函数keepICorrect()

我的问题是我是如何创建一个从我的服务到我的控制器的承诺,但不仅如此,还等待解决或失败,具体取决于i请求的数量是否已完成? / p>

1 个答案:

答案 0 :(得分:1)

你需要创建一个承诺数组

keepICorrect: function (security) {
    var self = this;
    var promises = [];
    for (var i = 0 ; i < entity.length; i++) {
        promises.push(self.getDataFromREST(security, i));
    }
    return promises;
},

然后等待所有人使用Angular中的$q库完成

$q.all(getDataService.keepICorrect(security))
.then(....