2016-09-02 5 views
0

私は次のコードを使用してバックエンドからいくつかの情報を取得しています:私はAJAXをトリガーにしたいループ内で同じajax呼び出しをどのように注文するのですか?

angular.forEach(authors, function(author){ 
      var authorId = author.id; 
      var url = contextPath + '/book/list/' + authorId; 
      $http({ 
       method: 'GET', 
       url: url 
      }) 
      .then(function(response){ 
       author.books = response.data; 
      }) 
     }); 

は、各AJAX呼び出しを待って意味し、同時に1ないすべてずつ呼び出し、前のものが完了するためのものです。誰かが自分のコードの変更点を知っていますか?

答えて

-1

$q.all()

を見てみましょう入力約束のすべてが解決されるときに解決された単一の約束に複数の約束を結合します。

EDIT: Ooops、それを読んでいない。 1つの約束が解決された後、あなたは別のを呼び出すように、$ q.all()すべての約束を解決するのを待つ、あなたがそれらをチェーンする必要があります。

 somepromise 
     .then(function(response){ 
      return $http({method:"some method",url:"some urlj",data:response}); 
     }).then(function(response2){ 
      //chain third and so on 
     }) 

基本的にあなたがチェーンそれら

+0

私のajax呼び出しは同じで、場合によっては(200呼び出し)多くの場合があります。だから私はあなたのコードを書くことがたくさんできるので、私はあなたのコードを使用することはできません。 – Nisman

0
ことができるように約束を返す必要があります

はい、あなたは

angular.forEach(authors, function(author){ 
     var authorId = author.id; 
     var url = contextPath + '/book/list/' + authorId; 
     $timeout(function(){ 
     $http({ 
      method: 'GET', 
      url: url 
     }) 
     .then(function(response){ 
      author.books = response.data; 
     }) 
    })},2000);//2000-> milliseconds; 

これは、2秒ごとにあなたのGET要求を行い、以下のような角度で$タイムアウトサービスを使用してシーケンスベースで電話をかけることができます。あなたのコールにもう少し時間がかかることがわかっている場合は、必要に応じてタイムアウト値を設定してください。

+1

それは同時にすべてのAjaxコールを同時に発砲します。それをする前に2秒待つだけです。 – Nisman

+0

このコードは以前の結果を待っていませんか? – Aravind

+0

いいえ... – Nisman

関連する問題