在AngularJs $ http方法中访问successCallback

时间:2016-03-23 13:18:25

标签: angularjs scope

我想访问回复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

2 个答案:

答案 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);
}