我昨天开始使用AngularJS,所以我确定我对这个问题非常愚蠢,但我们走了。
这是我的服务。
angular.module('UserService', ['ngResource'])
.factory('User', ['$resource', '$http', function($resource, $http){
User = {};
User.login = function (){
var url = 'http://example.com/api/user/login';
loginInfo = $http({
method: 'POST',
url: url,
data: "user=user&pass=imagethereisahugepasshere",
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function(data){
loginInfo = data;
})
return loginInfo;
}
return User;
}])
如果我将其附加到我的控制器并致电console.log(User.login())
,它会向我返回承诺而不是回复(根据网络Chrome标签,这是正确的。)
我做错了什么?
答案 0 :(得分:1)
在您的代码中: -
return--> loginInfo =$http({
method: 'POST',
url: url,
data: "user=user&pass=imagethereisahugepasshere",
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function(data){
loginInfo = data;<-- doesn't come into picture
})
return loginInfo;<--$http service promise rather than local data variable
显然loginInfo是$ http服务承诺。
答案 1 :(得分:1)
因为它是异步请求,所以当函数返回时它不会完成。这就是为什么你有一个成功的回调来做任何在请求实际完成时需要做的事情。
获得回复允许您以不同的方式处理它 - 您可以使用.then()在承诺完成后执行某些操作。但重要的是要知道函数会在数据恢复之前返回。