Angularjs服务响应

时间:2014-10-02 11:31:35

标签: angularjs

我使用angularjs来调用服务器方法并获得返回响应。但问题是来自angularjs服务的响应对控制器是空的。考虑一下我的代码:

testModule.factory('testService', ['$http', function ($http){

    return {
        getResponse: getResponse
    };

    function getResponse(url, data)
    {

        var returnResponse = {};

        $http({

            'url' : url,
            'method' : 'POST',
            'data' : data
        })
        .success(function(response){

            returnResponse = response;
            console.log(returnResponse);  <-- here it prints the object with data inside.
        });

        console.log(returnResponse);  <-- here it prints empty value for returnResponse.

        return returnResponse;
    }
}]);

如代码中所描述的那样,问题是成功之外的函数对象获取null或空值。请提出建议。 感谢。

1 个答案:

答案 0 :(得分:1)

这是因为http请求您正在调用的请求是异步调用。

你可以想到一个不同的线程并执行该函数,其余的函数将恢复正常执行。

所以, 只要你点击$ http(..)

|  .
v  .
|  $http(....)   -----> I would go and get it evaluated asynchronously
V                        When I finish, I will execute anything that lies in success 
|                          callback
v  console.log(...); ------> I will not wait for success to call, that is an async 
|                              operation I will print the value of returnResponse just 
v                                after I hit $http(...), I won't wait for its response

因此,在成功回调之外的console.log()returnResponse没有任何内容,因此打印undefined或null。

您可以在这里使用的重要概念是Promises或Q.浏览它。这应该是一个安全的解决方案来解决你的问题。

希望你理解。