cyberwombat
cyberwombat

Reputation: 40153

Force rejecting Angular $http call

I am using $http to make a call. Based on the successful result of the call I may decided to throw an error/reject and have it trickle down to the next call as an error. However if an error is thrown it just halt the process. How can I force the $http promise to reject without wrapping it in some $q code?

// 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?
})

In the above code I would like the Big Error message to end up as a rejected call. However in this case it just dies with the error. This is how I handle things in say Bluebird but it's a no go here.

Upvotes: 0

Views: 1085

Answers (1)

Dayan Moreno Leon
Dayan Moreno Leon

Reputation: 5435

Ti continue the Chain in a rejected state just return a rejected promise $q.reject('reason') from your $http result something like

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

That way you'll get a a rejected promise and can react to it even when the api call is successful.

Upvotes: 2

Related Questions