使用$ q.all链接Angular中的承诺

时间:2016-06-24 16:25:06

标签: angularjs

我在服务中有一个承诺链的以下布局......

this.getData = function(params) {
     var promise = $http({}).then(function(firstdata) {

      // work on the first data and then call a number of promises for fetch additional data
      var promises = list.map(function(item) {
        return $http({}).then(function(result2) {
          // this is an amalgamation of all the data from the various calls
          return finalData;
        });
        return $q.all(promises);  
      })
    });
    return promise;
  }

然后在我的控制器中我正在做

myService.getData().then(function(data){
});

问题在于控制器中的THEN在PROMISES(注意复数)之前执行了返回值。

这可能是愚蠢的事情,但任何关于如何简化/使它工作的想法都会很方便!

1 个答案:

答案 0 :(得分:3)

目前,你的内部promises($ q.all承诺)并未从promise变量返回。您还应该返回promises(复数),以确保链应该起作用。

this.getData = function(params) {
    var promise = $http({}).then(function(firstdata) {

        // creating new promise array in `promises` function
        var promises = list.map(function(item) {
            return $http({}).then(function(result2) {
                // this is an amalgamation of all the data from the various calls
                return finalData;
            });
            return $q.all(promises); 
        });
        return promises; //returning inner promise
    });
    return promise;
}