我一直在思考使用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会使代码更具可读性和可维护性?或者还有其他方法吗?
答案 0 :(得分:4)
您的问题不在于获取请求,而是更好的编码承诺的方式。您需要做的是创建更多的模块化函数,这些函数能够处理传入的数据,并返回您需要的内容。例如:
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
个电话串在一起,因为您提到您需要先前调用的数据来计算下一个的网址。
答案 1 :(得分:3)
$http.get()
返回一个承诺。
$http.get(url_get1)
.then($http.get(url_get2))
.then($http.get(url_get3))
阅读promises
此外,请检查此答案:How to bundle Angular $http.get() calls?