使用 angularjs 为多个 HTTP GET 请求获取更清晰的代码

Getting cleaner code for multiple HTTP GET requests with angularjs

我一直在思考使用 angularjs 进行 HTTP GET REST 调用的 3 种方法。它们是 $http、ngResource 和 restangular。我选择 $http 是因为它最简单并且代码可读性最强。但是,我的 REST 调用变得越来越复杂。我需要发出嵌套的 HTTP GET 请求并确保请求的 运行 顺序正确。如果一个请求失败,整个 HTTP GET 请求链将停止。

代码看起来像这样;

$http.get(url_get1).success(function(data, status, headers, config)
{
    $http.get(url_get2).success(function(data, status, headers, config)
    {
         $http.get(url_get3).success(function(data, status, headers, config)
         {
             //more action
         }
    }
}

如果 HTTP 请求链变长,代码将变得不可读。

使用 ngResource 或 restangular 会使代码更具可读性和可维护性吗?或者还有其他方法吗?

$http.get()returns一个承诺。

$http.get(url_get1)
   .then($http.get(url_get2))
   .then($http.get(url_get3))

阅读有关 promises

另外,检查这个答案:

您的问题不在于获取请求,而在于更好的编码承诺方式。您需要做的是创建更多能够处理传入数据的模块化函数,以及 return 您所需要的。例如:

function dataFromGetA(data){
    // modify your first get calls data here to the variable, or url you need for the next call
    return $http.get('http://someurl.com/' + data.someKey);
}

function dataFromGetB(data){
    return $http.get('http://someotherurl.com/' + data.somethingElse);
}

一旦创建了一组此类函数,就可以轻松地将它们链接起来,如下所示:

$http.get(firstUrl)
    .then(dataFromGetA)
    .then(dataFromGetB);

请注意,我并没有简单地将 $http 调用链接在一起,因为您提到您需要以前调用的数据来计算下一个调用的 url。