Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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
使用angularjs为多个HTTP GET请求获取更干净的代码_Angularjs_Rest_Http Get_Restangular_Ngresource - Fatal编程技术网

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

使用angularjs为多个HTTP GET请求获取更干净的代码,angularjs,rest,http-get,restangular,ngresource,Angularjs,Rest,Http Get,Restangular,Ngresource,我一直在思考使用angularjs进行HTTP GET REST调用的3种方法。它们是$http、ngResource和restanglar。我选择了$http,因为它最简单,并且可以生成可读性最好的代码。然而,我的REST电话变得越来越复杂。我需要生成嵌套的HTTP GET请求,并确保请求以正确的顺序运行。如果一个HTTP GET请求失败,整个HTTP GET请求链将停止 代码看起来像这样 $http.get(url_get1).success(function(data, status, h

我一直在思考使用angularjs进行HTTP GET REST调用的3种方法。它们是$http、ngResource和restanglar。我选择了$http,因为它最简单,并且可以生成可读性最好的代码。然而,我的REST电话变得越来越复杂。我需要生成嵌套的HTTP GET请求,并确保请求以正确的顺序运行。如果一个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或Restanglar会使代码更具可读性和可维护性吗?或者还有其他方法吗?

$http.get()
返回承诺

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

此外,请检查此答案:

$http.get()
返回承诺

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


此外,请检查以下答案:

您的问题不是get请求,而是更好的编码方式。您需要做的是创建更多的模块化函数,这些函数能够处理传入的数据,并返回您需要的数据。例如:

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。

您的问题不是get请求,而是更好的编码方法。您需要做的是创建更多的模块化函数,这些函数能够处理传入的数据,并返回您需要的数据。例如:

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。

如果您需要确保您的调用以特定的顺序运行,那么我会仔细考虑原因。如果您需要一个请求中的数据来决定如何处理另一个请求中的数据,请将其拉入变量。变量内容需要首先从HTTP GET获取。因此,我认为我无法避免让调用按特定顺序运行。将承诺链接起来,而不是嵌套。使代码更易于阅读和维护如果需要确保调用以特定的顺序运行,那么我会仔细考虑原因。如果您需要一个请求中的数据来决定如何处理另一个请求中的数据,请将其拉入变量。变量内容需要首先从HTTP GET获取。因此,我认为我无法避免让调用按特定顺序运行。将承诺链接起来,而不是嵌套。使代码更易于阅读和维护,这是一个很好的答案。似乎我可以坚持使用$http。我希望我能投票100次。对不起,我选择了另一个答案作为答案。答案很好。似乎我可以坚持使用$http。我希望我能投100票。对不起,我选择了另一个答案作为答案。另一个伟大的答案值得10票!看来我真的能坚持到$http。另一个值得10票的好答案!看起来我真的可以保持$http。