2017-02-17 44 views
1

我有一個AngularJS函數可以從數據庫中獲取一些數據。根據數據填充到數據庫的方式,我不會獲得我正在尋找的一些數據(我會在原始調用的一兩秒鐘內收回數據)。我想要做的是檢查從數據庫返回的結果,如果某種類型尚未存在,則「推送另一個承諾」以再次從數據庫中獲取數據。這是我目前的功能:基於結果重複角度承諾?

  function getResponses(ids,user) { 
      var deferred = $q.defer(); 
      var promises = []; 
      var idsString = ""; 

      angular.forEach(ids, function (id) { 
       idsString += "," + id; 
      }); 

      idsString = idsString.substring(1); 

      //Get Response calls retrieves the data from the database 
      promises.push(getResponse(idsString, user)); 

      $q.all(promises).then(function(results) { 
       deferred.resolve(results); 
      }); 

      return deferred.promise; 
     } 

我到目前爲止最大的問題是我會在哪裏放置「檢查結果」部分?我想它會在$ q.all塊中,但是我需要首先從數據庫中解析結果,還是隻檢查數據庫中的結果,如果它們包含所有必需的類型,則解決它然後?如果它沒有解決,只要繼續推動getResponse承諾在一個$間隔,直到期望的結果回來?

我甚至要求甚至可能嗎?

感謝

+1

所以,基本上你要查詢的數據庫中特定類型的值?如果是這樣,創建一個接受類型參數並解析該特定值的函數將更爲合理。通過這種方式,您可以創建一系列承諾,等待所有承諾,並在他們全部解決後獲得您的價值觀。 –

回答

0

沒有必要製造與$q.defer因爲$q.all已經返回一個承諾一個承諾:

function getResponses(ids,user) { 
    //var deferred = $q.defer(); 
    var promises = []; 
    var idsString = ""; 

    angular.forEach(ids, function (id) { 
     idsString += "," + id; 
    }); 

    idsString = idsString.substring(1); 

    //Get Response calls retrieves the data from the database 
    promises.push(getResponse(idsString, user)); 

    /* NOT needed 
    $q.all(promises).then(function(results) { 
     deferred.resolve(results); 
    }); 

    return deferred.promise; 
    */ 

    //INSTEAD return promise from $q.all 
    return $q.all(promises); 
}