2015-05-20 93 views
0

我有這樣的情況下,我會被人打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之一,但它還挺手冊,有沒有辦法你可以在循環中設置它所以它自動鏈查詢一個接一個,(承諾所有是不是我在這裏尋找,因爲我需要查詢進來,直到一個完成)

感謝您的任何想法或建議,我正在學習解決這類問題的更好方法。

乾杯

+0

所有這些承諾是相互獨立的,那麼爲什麼'$ q.all'不適合? –

+0

他們爲什麼需要連續運行?爲什麼不平行? – Phil

+0

$ q.all做所有的查詢和回調作爲整體,我需要調用一個完成然後去下一個。 – Bruce

回答

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) { ... }); 
+0

這個很棒!非常聰明:) – Bruce

+0

我很高興它的工作,因爲我根本沒有測試它;) – Phil

+0

我要實現它,但我明白了。謝謝你,先生 – Bruce