2014-02-09 37 views
0

我有一個功能,檢查記錄,如果它們存在,它會爲每個項目下載它們。這是一個在循環中發生的函數,因此可以記錄多條記錄。我認爲我正在使用$ Q來緩和每個$ http請求的等待時間,因此它們並不都是同時發生的,但它們仍然在同一時間觸發。

我看過$ q.defer();但不明白如何在我的實現中使用它。如何正確地將每次通話延遲到以前的通話完成?

CheckRecords: function(obj) { 
     var promise; 
     var promises = []; 

     if (obj.BD.img == 'checkedRecord') { 
      var objBDUrl = 'services/GetSurveyBD/?id=' + obj.BD.ID; 
      promise = $timeout(function(){ 
        $http.get(objBDUrl, { cache: true }).then(function(response) { 
         obj.BD.ID = obj.BD.ID; 
         obj.BD.data = response.data; 
        }); 
       }, 250); 
      promises.push(promise); 
     } 
     if (obj.MR.img == 'checkedRecord') { 

      var objMRUrl = 'services/GetMR/?id=' + obj.MR.ID; 
      promise = $timeout(function(){ 
       $http.get(objMRUrl, { cache: true }).then(function(response) { 
        obj.MR.ID = obj.MR.ID; 
        obj.MR.data = response.data; 
       }); 
      }, 250); 
      promises.push(promise); 
     } 
     $q.all(promises).then(function(){ 
      return obj; 
     }); 
    } 

回答

0

功能$q.all只是確保所有請求完成後,請求仍然立即執行,但其結果被推遲。如果您想控制執行順序,請在結果函數中執行您的請求。

0

$ q - 模塊中的服務ng 幫助您異步運行函數並在完成處理時使用它們的返回值(或例外)的服務。