链接两个$ http调用并返回第二个结果

时间:2015-06-08 16:19:27

标签: angularjs

我有 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 来电的结果?

2 个答案:

答案 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);
});