我想访问回复successCallback(response)
var list_of_user = $http({
method: 'GET',
url: '/users/'
}).then(function successCallback(response) {
$scope.all_users = response.data;
}, function errorCallback(response) {
console.log(response);
});
console.log("$scope.all_users ", $scope.all_users)
是不受欢迎的
我可以从html访问$scope.all_users
,但如何在控制器中访问$scope.all_users
?
答案 0 :(得分:2)
$http
是异步的,console.log
在实际请求完成之前执行。
正如您在评论中定义的那样,您想要比较两个响应,您可以通过简单地放置一个等待两个请求完成的标志来做到这一点。
var done = 0;
var onRequestFinishes = function() {
done += 1;
if (done < 2) {
return; // one of both request is not completed yet
}
// compare $scope.response1 with $scope.response2 here
}
并发送第一个请求并将响应保存到$scope.response1
并在此之后调用onRequestFinishes
。
$http({
method: 'GET',
url: '/users/'
}).then(function successCallback(response) {
$scope.response1 = response.data;
onRequestFinishes();
}, function errorCallback(response) {
console.log(response);
});
同样发送第二个请求
$http({
method: 'GET',
url: '/users/'
}).then(function successCallback(response) {
$scope.response2 = response.data;
onRequestFinishes();
}, function errorCallback(response) {
console.log(response);
});
答案 1 :(得分:1)
对于请求处理,您可以创建单独的保证链,并在解决所有保证时使用$q.all()
执行代码。
var request1 = $http.get('/users/').then(function(response)
{
console.log('Users: ', response.data);
return response.data;
}
var request2 = $http.get('/others/').then(function(response)
{
console.log('Others: ', response.data);
return response.data;
}
$q.all([request1, request2]).then(function(users, others)
{
console.log('Both promises are resolved.');
//Handle data as needed
console.log(users);
console.log(others);
}