$http returns 承诺代替数据
$http returns promise instead data
昨天我从 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())
,它 returns 我承诺而不是响应(这是正确的,根据网络 Chrome 选项卡)。
我做错了什么?
在您的代码中:-
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 服务承诺。
因为是异步请求,函数returns时还没有完成。这就是为什么当请求实际完成时,你有一个成功回调来做任何需要做的事情。
取回 promise 允许您以不同的方式处理它 - 您可以使用 .then() 在 promise 完成后做一些事情。但重要的是要知道该函数将 return 在取回数据之前。
昨天我从 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())
,它 returns 我承诺而不是响应(这是正确的,根据网络 Chrome 选项卡)。
我做错了什么?
在您的代码中:-
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 服务承诺。
因为是异步请求,函数returns时还没有完成。这就是为什么当请求实际完成时,你有一个成功回调来做任何需要做的事情。
取回 promise 允许您以不同的方式处理它 - 您可以使用 .then() 在 promise 完成后做一些事情。但重要的是要知道该函数将 return 在取回数据之前。