在具有多个 $http.get 的服务中使用 promise with closure

Using promise with closure in service with multiple $http.get

我到处搜索,但似乎无法全神贯注 q.defer() 并做出自己的承诺。

我有一项服务 getDataService 正是这样做的 - 来自 REST 服务器的 $http.gets 数据。但是一次只能发送一个变量,所以如果用户想查询服务器的两个实体和 return 整个关联数据,他们必须发送两个请求。因此,我不得不使用一种将 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 数量的请求是否已完成?

您需要创建一个承诺数组

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(....