AngularJS deferred.reject not working, but $ q.reject working

I am confused between Angular JS deferred and $ q. I found this SO Question which explains the difference between $q.defer()and $q. He explains

$ q.reject is a shortcut for creating deferred and immediate rejection of it

So it $q.reject()should be equal

var deferred = $q.defer(); deferred.reject()If not, explain the actual difference between the two.

But in my case it $q.reject()works, but it deffered.reject()does not work. We also need to return rejected promises like $q.reject(), but not deferred.reject(). I saw examples where there is no returndeffered.reject()

This is the code

 var deferred = $q.defer();
 myService.getData()
 .then(function(response){
   deferred.notify('Just a notification');
   deferred.reject('rejected');
 })
 .then(function(response) {
   console.log('done');      
 }, function(response) {
   console.log('rejected');
 })

This does not work, but when I replaced deferred.rejectwith $q.reject(), the promise was rejected and the control was moved to the error function of the subsequent block then.

. .

+4
3

, deferred.reject, . $q.reject(), deferred.reject(), .

,

  • $q.reject()
  • deferred.reject() , , ( $promise).

, , . , return deferred.reject(), ( , , ), , .

deferred, :

var deferred = $q.defer();
myService.getData()
    .then(function(response) {
        deferred.notify('Just a notification');
        deferred.reject('rejected');
        return deferred.promise;
        //return $q.reject();
    })
    .then(function(response) {
        console.log('done');
    }, function(response) {
        console.log('rejected');
    });

, , : $q.reject() - "". deferred.reject() , deferred.$promise. ? $q.reject(), , -.

+5

, .

function getData() {
    var deferred = $q.defer();
    myService.getData()
        .then(function (response) {
           deferred.resolve('Just received a notification');
        }).catch(function (err) {
           deferred.reject(err); 
        };

    return deferred.promise;
}

getData().then(function (response) {
    console.log('done');
}, function (response) {
    console.log('rejected');
});
+2

This works with Q ( https://github.com/kriskowal/q )

var def = Q.defer();
def.promise
.then(
    function(ok){
        return ok;
    },
    function(err){
        var d = Q.defer();
        d.reject(err);
        return d.promise;
    }
)
.then(
    function(ok){
        console.log('ok',ok);
    },
    function(err){
        console.log('err',err);
    }
);
def.reject('error');
0
source

All Articles