2017-02-17 73 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); 
}