将异步 AJAX 调用与 Angularjs 链接起来

Chaining asynchronous AJAX calls with Angularjs

本文关键字:Angularjs 链接 起来 调用 异步 AJAX      更新时间:2023-09-26

我正在使用Angularjs,并且我已经使这项服务具有返回promise的多个函数。

我的 AJAX 服务:

angular.module('yoApp')
    .factory('serviceAjax', function serviceAjax($http) {
      return{
      
        configDataSets:function(path){
          return $http.get(path);
        },
        fileList: function(site_url,dataSet,varName,region,date){
          return $http.get(site_url + "mwf/" + dataSet + "/" +varName + "/" + region + "/" + date + "/filelist/");
        },
        config: function(site_url,dataSet){
          return $http.get(site_url + "mwf/" + dataSet + "/config/");
        },
      }});

控制器代码

我已经做了这样的事情,但由于我可能有更多的请求链接,我认为这不是最好的方法:

serviceAjax.config(site_url,$scope.dataset).then function(data){
          $scope.config=data.data;
serviceAjax.configDataSets("images/configDatasets.json").then(function(data){
          $scope.configDatasets = data.data;
 
});
});

我想做的是首先调用我的控制器配置,然后等待它完成,然后调用 配置数据集 . 最好的方法是什么,我试图查看$q并有所不同,但我似乎无法弄清楚该怎么做。任何帮助都会很棒!

只需使用 promise 公开的 .then 方法:

serviceAjax.config(function(response) {
     // use response.data from first call
     ...
}).then(function() {
     return serviceAjax.configDataSets("images/configDatasets.json");
}).then(function(response) {
     // use response.data from second call
     ...
});

此外,如果您的 HTTP 服务遵循典型的 RESTful 用法,请考虑使用 $resource 而不是 $http