2015-10-29 52 views
0

我想在我的Web应用程序中继续进行之前完全加载多个方法。对于我已经做了以下 -如何等待多个请求在angularjs中完成

 function getData(){ 
     var defer = $q.defer(); 
     $http.get("/echo/json/").success(function(data, status) { 
      getData2(); 
      getData3(); 
      $timeout(function(){   
       defer.resolve(data); 
      }, 1000); 
     }); 
     return defer.promise; 
     } 

这里,getData2()和getData3()也将做AJAX调用。所以我必须等待这些方法才能完成那里的调用,然后我必须返回主要方法的承诺。

这是行之有效的,但给我的性能问题。 任何其他方式我可以做到这一点?

回答

6

如果顺序并不重要,可以用$ q.all()如下:

$q.all([getData1(), getData2(), getData3()]) 
    .then(function(result){ 
     // result[0] is output of getData1() 
     // result[1] is output of getData2() 
     // result[2] is output of getData3() 
    }); 

但是,如果顺序很重要,叫他们在链如下:

getData1() 
    .then(function(result1){ 
     return getData2(); 
    }) 
    .then(function(result2){ 
     return getData3(); 
    })   
    .then(function(result3){ 
     // your other codes 
    }); 
1

假设所有getDataX函数返回承诺,你应该像他们那样链接它们:

getData() 
.then(function(result){ 
    return getData1(); 
}) 
.then(function(result1){ 
    return getData2(); 
})...