2016-04-04 3 views
0

AngularJS(私はIonicを使用しています)を使用して非同期呼び出しを実行する際に問題があります。 私は$localStorageにデータを保存しています。次に、すべてのデータをサーバーに送信する機能があります。問題は、http POST要求からのエラーコールバックの場合にそれらを戻すことです。 私のコードがあります:複数のポストを処理し、angularJsでデータを取得

var data = $localStorage.prelevement.environement; 
for (var j = 0; j < data.length; j++) { 
    $http.post("http://localhost:3000/prelevement/environement", data[j]).then(
    function (res){}, 
    function (err) { 
     $localStorage.prelevements.environement.push(data[j]); 
    }); 
    } 

ポイントは、最初のコールバックが発生した場合、ループのためにすでに終了してdata[j]undefinedあるのでj = data.length + 1はので、私はエラーを得たということです。

私のコールバック関数やこれを処理するためのアイデアで送信されたデータをキャッチする方法はありますか?

+0

あなたは各呼び出しのための$タイムアウト/ setTimeoutを入れてみましたか? – MrNew

+0

私の意見では、 '$ http'部分をパラメータとして値を受け取ってループ内で使用する関数に移動させてください。ここで関数を使用する理由は、クロージャの利点を得ることです。 – Ali

答えて

0

約束通りに$localStorage.prelevement.environement;を折り返し、残りのコードを実行します。コンストラクタで$qを参照することを忘れないでください。

var dataPromise = $q.when($localStorage.prelevement.environement); // returns a promise 

dataPromise.then(function(){ // resolve the promise in the successcallback using then() 
    for (var j = 0; j < data.length; j++) { 
     $http.post("http://localhost:3000/prelevement/environement", data[j]).then(
     function (res){}, 
     function (err) { 
      $localStorage.prelevements.environement.push(data[j]); 
     }); 
     } 
}); 
0

私は匿名関数に包み、答えを見つけた:

var data = $localStorage.prelevement.environement; 
for (var j = 0; j < data.length; j++) { 
    (function(i){ 
     $http.post("http://localhost:3000/prelevement/environement", data[j]).then(
      function (res){}, 
      function (err) { 
       $localStorage.prelevements.environement.push(data[j]); 
     }); 
    })(j) 
    } 

は、すべてのあなたの答えをありがとう! :)

関連する問題