处理多个帖子并使用angularJs检索数据

时间:2016-04-04 15:10:10

标签: javascript angularjs http post asynchronous

使用AngularJS执行异步调用时遇到问题(我正在使用Ionic)。 我已将数据存储在$localStorage中。然后有一个函数将所有数据发送到服务器。问题是在http POST请求出现错误回调的情况下将它们存回。 有我的代码:

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]);
    });
  }

关键是当第一次回调发生时,for循环已经完成j = data.length + 1因此我收到错误,因为data[j]undefined

有没有办法在我的回调函数中捕获已发送的数据或有任何处理这个的想法?

2 个答案:

答案 0 :(得分: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]);
        });
      }
});

答案 1 :(得分: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)
  }

感谢您的所有答案! :)