2017-09-01 48 views
2

在angularjs中,我試圖以順序的方式一個接一個地執行服務。下面是我的代碼,Angularjs在承諾中執行服務

$q.when() 
    .then(function() { 
      console.log("Start"); 
      return getMyDetailsService.MyDetails();      
     }) 
    .then(function (MyDetails) { 
      console.log("Step 2"); 
      var AllTabs = [];    
      angular.forEach(MyDetails, function(value, key){     
       AllTabs.push({ "TabName":value.checkfile });     
      });    
     return AllTabs;   
     }) 
    .then(function (AllTabs) { 
      console.log("Step 3"); 
       angular.forEach(AllTabs, function(value, key){ 
        console.log(value.TabName); 
        return getMongodbDataService.MongoDatadb(value.TabName) 
        //console.log(MongoDatadb) 
       })  
     }) 
    .then(function (MongoDatadb) { console.log("Step 4"); console.log(MongoDatadb); }) 
    .then(function (AllTabs) { console.log("Finish"); }) 

問題是,我在控制檯中的「步驟4」後出現「未定義」。看起來服務「getMongodbDataService」沒有正確接受輸入。如果我評論forEach循環,並使用硬代碼輸入執行,它可以工作。

//angular.forEach(AllTabs, function(value, key){ 
     //console.log(value.TabName); 
     return getMongodbDataService.MongoDatadb('Tab01') 
     //console.log(MongoDatadb) 
//}) 

請建議,我在承諾處理中犯了錯誤。請告訴我,如果服務返回多個「MongoDatadb」響應,下一個函數(步驟4)將處理所有請求,還是隻處理最後一個請求。根據我的需要,我必須逐個處理所有的反應。

非常感謝

+0

我可能籤他的職位https://開頭計算器.com/questions/20100245/how-can-i-execute-array-of-promise-in-sequential-order –

+0

步驟3不返回任何內容。 ['angular.forEach'](https://docs.angularjs.org/api/ng/function/angular.forEach)只是爲每個項目調用迭代器函數一次,其中的'return'實際上沒有任何用處返回您的承諾鏈的結果。 –

+0

嘗試使其返回AllTabs.map(函數(選項卡){返回getMongodbDataService.MongoDatadb(tab.TabName)});'而不是'forEach'。 –

回答

1

angular.forEach不會在「步驟3」中返回任何值。 您應該使用map()返回承諾的數組,$q.all()將它們全部組合成一個單一的承諾將得到解決時,所有的輸入承諾得到解決:

return $q.all(AllTabs.map(function(tab){ return getMongodbDataService.MongoDatadb(tab.TabName) })); 
0

,因爲你返回命令是不是在你的諾言治療範圍「的foreach」方法的範圍。

+0

也許你可以返回一個數組。 –