Angular中的多个HTTP请求

时间:2015-07-16 01:27:25

标签: javascript angularjs rest

所以这是我的控制器:

app.controller('dbCtrl', function($scope, $http) {
$http.get("http://private-abc.apiary-mock.com/bus")
.success(function(response) {
 $scope.network = response.networkupdates;});
 });

我接下来要做的是调用第二个HTTP请求,我想在最佳实践方面最好是创建第二个控制器来调用第二个HTTP,或者最好在第二个HTTP调用中包含第二个HTTP调用电流控制器(如果是,如何?) 感谢。

2 个答案:

答案 0 :(得分:0)

因此,使用promises的一个很酷的方面是它们可以被链接。所以在你的情况下,你打电话:

$http.get("http://private-abc.apiary-mock.com/bus")

返回一个承诺,然后您可以链接到另一个承诺,如下所示:

var requests = $http.get("http://private-abc.apiary-mock.com/bus").then(function(response) {
    $scope.network = response.networkupdates;
    // make second get call and return it to chain the promises
    return $http.get("some-other-endpoint").then(function(otherResponse) {
        // you can do something here with the response data
        return otherResponse;
    });
});

你现在拥有的是两个链接的承诺,它将返回最终值,所以如果你稍后再说:

requests.then(function(otherResponse) {
    // or you can do something here
    doSomething(otherResponse);
});

就Angular的最佳实践而言,我会说你最好创建一个服务或工厂来处理任何和所有的http请求。控制器实际上只是将数据绑定到视图;服务是您的业务逻辑和数据填充应该发生的地方。

答案 1 :(得分:0)

您可以在同一个控制器中进行$http来电。

$http服务是一个函数,它接受一个参数 - 一个配置对象 - 用于生成HTTP请求并返回带有两个$ http特定方法的promise:{{1} }。它内部使用success and error(受Kris Kowal的Q启发的承诺/延期实施)。

如果您的两个$q彼此独立,则可以使用$http“加入”您的http通话结果。

示例:

$q.all

如果您的http呼叫相互依赖,那么您可以使用$q.all([ $http.get("http://private-abc.apiary-mock.com/bus"), $http.get('/someUrl') ]).then(function(results) { $scope.network = results[0]; $scope.whatevername= results[1] }); }

的概念

例如:

chaining

有关$http.get("http://private-abc.apiary-mock.com/bus").then(function(result) { $scope.network = result.networkupdates; return $http.get("someurl").then(function(res) { return res; }); }); 的推荐,您可以看到https://github.com/kriskowal/q

有关q的推荐,您可以看到https://docs.angularjs.org/api/ng/service/ $ q