2016-04-12 18 views
3

idだけ異なる3つのソースURLからデータを取得したいとします。私が得ている結果はうまくいきますが、順不同です。私のコードは: var data = [{"id":"1"},{"id":"2"},{"id":"3"}]; var get = []; for(i=0;i<(data.length);i++){ $http.get("server URL"+data[i].id) .success(function(data) { get.push(data); }) .error(function(err) { console.log(err); }); }$scope.data= get; 私は研究を行い、試したこともありましたが、正しく動作させることはできませんでした。 私もthisリンクを試しましたが、私にとってはあまり役に立ちません。

+0

結果のスナップショットはありますか? – Deadpool

+0

私は実際のコードのデモを投稿できないように私のコードのデモを使用しました。ごめんなさい。 – Atula

答えて

4

これには$q.allを使用してください。

var data = [{"id":"1"},{"id":"2"},{"id":"3"}], 
    promises = []; 

for(i = 0; i < data.length; i++) 
    promises.push($http.get("server URL"+data[i].id)); 

$q.all(promises) 
    .then(function(result) { 
     $scope.data = result; 
    }, function(err) { 
     console.log(err); 
    }); 

結果は、要求の順序もたらすを持つ配列であろう。

+0

私はpromises.thenを取得している関数エラーではありません。あなたはそれで私を助けることができますか? – Atula

+0

@Atula申し訳ありません、私は私の答えを更新しました、私は 'q.all'を忘れました –

+0

ありがとうございます@Martijn、それは今すべてうまく動作しています。 – Atula

0

あなたは次のような何かを行うことができます:

var data = [{"id":"1"},{"id":"2"},{"id":"3"}]; 
var get = []; 
var i = 0; 
function loadDataInSequence(){ 
    if(i<data.length){ 
    $http.get("server URL"+data[i].id) 
     .success(function(data) { 
       get[i] = data;//calling callback 
      loadDataInSequence(); 
     }) 
     .error(function(err) { 
      console.log(err); 
     }); 
     i++; 
    } 
} 
$scope.data= get; 
0

の状況、これらの種類については、ライブラリがasyncが呼ばれます。 forループの代わりにasync parallelを使用できます。 シリーズのようなヘルパーもあり、さまざまな種類の要件に制限があります。

関連する問題