Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在angularjs中等待多个请求完成_Javascript_Angularjs_Performance_Angular Promise - Fatal编程技术网

Javascript 如何在angularjs中等待多个请求完成

Javascript 如何在angularjs中等待多个请求完成,javascript,angularjs,performance,angular-promise,Javascript,Angularjs,Performance,Angular Promise,我希望在继续我的web应用程序之前完全加载多个方法。为此,我做了如下工作: function getData(){ var defer = $q.defer(); $http.get("/echo/json/").success(function(data, status) { getData2(); getData3(); $timeout(function(){

我希望在继续我的web应用程序之前完全加载多个方法。为此,我做了如下工作:

      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调用。所以我必须等待这些方法完成调用,然后我必须返回main方法的承诺

这是工作良好,但给我的性能问题。
还有其他方法吗?

如果顺序不重要,请使用$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
    });
但是,如果顺序很重要,请按如下顺序对其进行连续调用:

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

假设所有
getDataX
函数都返回承诺,您应该像这样链接它们:

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