$ http循环,等待结果

时间:2016-06-22 15:56:15

标签: angularjs synchronization promise http-post

我有这个:

parallel --xapply --eta python sub_sample_.2.py ::: file1 file3 file5 ::: file2 file4 file6

我的问题在评论:)中为“j ++”。 如果我删除循环而硬编码3步,它就可以工作了。但我不知道如何用循环解决问题。你有好主意吗 ?感谢

2 个答案:

答案 0 :(得分:3)

根据OP的评论同步解决方案:

var promises = [];
for(var i=0;i<self.myList.length;i++)
 promises.push($http.post(...));
$q.all(promises).then(function(results){
 //All results available here
 var data = results.map(result => result.data);
 data.forEach((e, idx) => self.myList[idx] = e);
})
.catch(function(e){
 //Handle error
});

答案 1 :(得分:1)

问题是

  1. $http.post().then(function(){}, function(){})是异步函数。因此,循环完成时将执行.then()方法。这就是它总是取j的最后一个值为2的原因。
  2. then()只会$http.post()来一次,所以删除第二个.then()
  3. 解决方案发布在下面:

    var j = 0;
    var i = 0;
    
    // myList.length = 3
    while(j < self.myList.length - 1){
        $http.post('myURL', self.myList[j].code).then(function(response){
                    self.myList[i].plop = response.data;
                    i++;
    
                }, function(){
                    // error
                }
            );
    }