2017-02-17 18 views
1

私はデータベースからいくつかのデータを取得するAngularJS関数を持っています。データがデータベースにどのように取り込まれているかに基づいて、私はすぐに探しているデータを取得しません(元の呼び出しの2〜2回以内にデータを取得します)。私がしたいことは、データベースから戻ってきた結果をチェックすることです。特定のタイプがまだない場合は、もう一度データベースからデータを取得する「別の約束をプッシュ」することです。これまでのところ私の機能は次のとおりです。結果に基づいて角度の約束を繰り返しますか?

  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ブロックに入ると思っていますが、最初にデータベースから結果を解決する必要がありますか、データベースから結果を確認して、必要なタイプがすべて含まれていれば解決しますそれで?それが解決されない場合は、希望の結果が戻ってくるまで$ intervalでgetResponse約束を押し続けてください。

私は何を求めていますか?

おかげ

+1

を、基本的には、特定の型の値のデータベースをポーリングしたいですか?そうであれば、型パラメータをとり、その特定の値を解決する関数を作成する方が論理的です。そうすれば、約束の配列を作り、それらをすべて待つことができ、すべてが解決したら価値があります。 –

答えて

0

$q.allはすでに約束返すので$q.deferと約束を製造する必要はありません。だから、

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); 
} 
関連する問題