角度承诺链自动化

时间:2015-05-20 23:43:14

标签: angularjs

我有这种情况,我会逐个点击API,这是我提出的:

GridServices.getProjects(data[1].status_id, vm.myProject)
.then(function(data){
  vm.myData1 = data;
  vm.counter[1] = data.length;

  $scope.statusTypes[1].projects = vm.myData;
}).then(function(){
  GridServices.getProjects(data[2].status_id, vm.myProject)
    .then(function(data){
      vm.myData2 = data;
      vm.counter[2] = data.length;

      $scope.statusTypes[2].projects = vm.myData;
    })
}).then(function(){
  GridServices.getProjects(data[3].status_id, vm.myProject)
    .then(function(data){
      vm.myData3 = data;
      vm.counter[3] = data.length;

      $scope.statusTypes[3].projects = vm.myData;
    })
}).then(function(){
  GridServices.getProjects(data[4].status_id, vm.myProject)
    .then(function(data){
      vm.myData4 = data;
      vm.counter[4] = data.length;

      $scope.statusTypes[4].projects = vm.myData;
    })
}).then(function(){
  GridServices.getProjects(data[5].status_id, vm.myProject)
    .then(function(data){
      vm.myData5 = data;
      vm.counter[5] = data.length;

      $scope.statusTypes[5].projects = vm.myData;
    })
}).then(function(){
  GridServices.getProjects(data[8].status_id, vm.myProject)
    .then(function(data){
      vm.myData8 = data;
      vm.counter[8] = data.length;

      $scope.statusTypes[8].projects = vm.myData;
    })
}).catch(function(err, msg){
  console.log(err);
    });
});

基本上它一个接一个地触及API,但它有点手动,有没有办法可以在循环中设置它,以便逐个自动链接查询,(承诺全部不是我在这里寻找的,因为我需要查询才能进入,直到一个完成)

感谢您的任何想法或建议,我正在学习解决此类问题的更好方法。

干杯

1 个答案:

答案 0 :(得分:1)

如何设置函数来执行有条件地调用下一次迭代的数据检索。例如

var getProjectIteration = function(i) {
    return GridServices.getProjects(data[i].status_id, vm.myProject).then(function(data) {
        vm['myData' + i] = data;
        vm.counter[i] = data.length;
        $scope.statusTypes[i].projects = vm.myData;

        if (i < 8) {
            return getProjectIteration(i++);
        }
    });
};

getProjectIteration(1).catch(function(err, msg) { ... });