【发布时间】:2017-05-10 14:57:37
【问题描述】:
我正在处理页面加载时我有 2 个$http.get() 请求的场景。一个$http.get() 独立于另一个$http.get()。一切正常。但在某些情况下,我的第二个$http.get() 请求在第一个$http.get() 之前执行,我无法获得所需的输出。我们如何链接请求?由于我是 AngularJS 的新手,所以我没有那么多想法。
$scope.onload = function()
{
var responsePromise1 = $http.get(1st rest call);
responsePromise1.success(function(data) {
console.log(data.platform.record);
$scope.records=data.platform.record;
});
responsePromise1.error(function(data, status, headers, config) {
alert("ajax failed");
});
var responsePromise2 = $http.get(2nd rest call);
responsePromise2.success(function(data2) {
console.log(data2.platform.record);
$scope.records2=data2.platform.record;
});
responsePromise2.error(function(data2, status, headers, config) {
alert("ajax failed");
});
}
$scope.butto = function(datafrom1st,datafrom2nd)
{
var responsePromise3 = $http.get(3rd rest call);
responsePromise3.success(function(data3) {
console.log(data3.platform.record);
$scope.records3=data3.platform.record;
});
responsePromise1.error(function(data3, status, headers, config) {
alert("ajax failed");
});
}
<body>
<div ng-init="onload()">
<div ng-repeat="record in records">
{{record.id}}
</div>
<div ng-repeat="record2 in records2">
{{record2.name}}
</div>
<button type="button" class="btn btn-primary btn-sm ng-cloak"
style="padding-bottom:25px;font-weight:bold;"
ng-init="butto(record.id,record2.name)">
{{record3.data}}
</button>
</div>
</body>
【问题讨论】:
-
您的
responsePromise1在responsePromise2之前执行,但它们都是异步调用,这意味着我们不能保证谁会先完成。如果您需要链接请求,您的responsePromise2必须在sucess的responsePromise1内 -
如果他们是独立的,你不应该把他们锁起来。
-
如果它们彼此独立,则使用 Promise All。在 'then' 回调中,它会有两个响应。
-
使用控制器代替
ng-init,使用服务调用API。发布您的 html 和路线以获得更好的答案
标签: angularjs angular-promise angularjs-http