2016-08-09 5 views
-4

JAVASCRIPTjavascriptで応答を取得した後、forループを1つずつ実行する方法は?

for (var i=0; i<$scope.length; i++) 
{ 
    var data = { 
     page_no:i 
    }; 
    newlocalitemService.list(data, function(res) { 
     $scope.data.push(res); 
    }); 
} 

newlocalitemService

list: function(data,success,error){ 
    $http({ 
     url: CONFIG.apiUrl + '/items', 
     method: "GET", 
     params: data 
     }).success(success).error(error); 
} 

私は、forループでAPIを呼んでいます。応答後に各APIを呼び出す方法ここで$ scope.dataは配列として初期化され、APIは非同期メソッドです。

+1

あなたは1でループ1に対して実行何を意味していますか?それはforループがすることです。 – terpinmd

+0

どこからの応答を得たら?このループは繰り返し実行されます。 –

+1

[AJAXコールバック](https://docs.angularjs.org/api/ng/service/$http)が必要だと思います。私たちはあなたがそれを手助けするためにどのように応答を要求しているのかを知る必要があります。 – Blazemonger

答えて

1

コレクションの最後まで、自分自身を呼び出す再帰関数のいくつかの種類:あなたはAJAXデータをretriveたら、あなたはjQueryの中(のようなので、コールバック関数の内部ループのために挿入する必要があります

function doStuff(arr, idx) { 
    if (idx <= (arr.length - 1)) { 
     newlocalitemService.filter(arr[idx], function(res) { 
      $scope.data.push(res); 
      doStuff(arr, ++idx); 
     }); 
    } 
} 

doStuff($scope.data, 0); 
+0

です.newlocalitemService.filterがasyncの場合、期待通りに動作しません。 – terpinmd

+0

@terpinmd - なぜですか? 'function(res)'がasync関数からのコールバックであると仮定すると、これは正常に動作するはずです – tymeJV

0

):

var dataFromServer; //declare the variable first 
 

 
function getData() { 
 
    $.ajax({ 
 
     url : 'example.com', 
 
     type: 'GET', 
 
     success : handleData(dataFromServer) 
 
    }) 
 
} 
 

 
function handleData(data) { 
 
    alert(data); 
 
    //insert your for loop here 
 
    
 
}

関連する問題