我使用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或空值。请提出建议。 感谢。
答案 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.浏览它。这应该是一个安全的解决方案来解决你的问题。
希望你理解。