强制拒绝Angular $ http调用

时间:2016-05-03 00:43:05

标签: angularjs angular-promise

我正在使用$http拨打电话。根据调用的成功结果,我可能会决定抛出错误/拒绝,并将其作为错误逐入下一次调用。但是,如果抛出错误,它只是暂停该过程。如何强制$ http承诺拒绝而不将其包含在某些$ q代码中?

// A service

angular.module('app').factory('aService', function ($http, config) {    
  return {
    subscribe: function (params) {
      return $http({
        url: '...'
        method: 'JSONP'
      }).then(function (res) {
        // This is a successful http call but may be a failure as far as I am concerned so I want the calling code to treat it so.
        if (res.data.result === 'error') throw new Error('Big Errror') 
      }, function (err) {
        return err
      })
    }
  }
})


// Controller
 aService.subscribe({
  'email': '...'
}).then(function (result) {

}, function (result) {
    // I want this to be the Big Error message. How do I get here from the success call above?
})

在上面的代码中,我希望Big Error消息最终成为被拒绝的调用。但是在这种情况下它只是因为错误而死亡。这就是我在Bluebird中处理事情的方式,但这是不可取的。

1 个答案:

答案 0 :(得分:2)

Ti在拒绝状态下继续链接只是从你的$ http结果返回被拒绝的承诺$q.reject('reason')

$http.get(url).then( function (response){ if(something){ return $q.reject('reason'); } return response; } )

这样你就会得到一个被拒绝的承诺,即使api呼叫成功,也可以对它做出反应。