我有 Angular Service ,我想用它来执行两次$http
次调用,并返回第二次调用的结果。这是服务:
angular.module('myApp', [])
.service('farm', ['$http']);
function farm($http) {
this.saveFruit = function(fruit) {
return $http.get('http://example.com/get-token').success(function(token) {
return $http({
method: 'POST',
url: 'http://example.com/save-fruit',
headers: { 'X-CSRF-Token': token },
data: { fruit: fruit }
});
});
}
}
此时,代码工作正常。我能够#34;保存一些水果",它通过GET
为自己抓取一个令牌,然后通过POST
发送数据,一切都保存在云端,太棒了。
要拨打此服务,我使用以下代码:
var fruit = { name: 'Apple', color: 'red' };
farm.saveFruit(fruit).success(function(result) {
console.log(result);
});
但是,console.log()
始终打印出$http
GET 的结果,而不是 POST
如何在致电$http
时获得saveFruit
POST 来电的结果?
答案 0 :(得分:3)
使用.success
的{{1}}和.error
方法打破了承诺链。这是没有记录的,可以认为是一个错误。
要继续使用保证链,请根据需要使用$http
(和.then
)。
.catch
答案 1 :(得分:2)
success()
不允许链接承诺。使用真实的东西:then()
。
return $http.get('http://example.com/get-token').then(function(response) {
return $http({
method: 'POST',
url: 'http://example.com/save-fruit',
headers: { 'X-CSRF-Token': response.data },
data: { fruit: fruit }
});
}).then(function(response) {
return response.data;
});
和
var fruit = { name: 'Apple', color: 'red' };
farm.saveFruit(fruit).then(function(result) {
console.log(result);
});