Вырваться из обещаний в Angularjs

Я пытаюсь найти способ вырваться из цепочки обещаний в коде AngularJS. Очевидный способ состоял в том, чтобы вернуть объект, а затем проверить правильность каждой функции «тогда» в цепочке.

Я хотел бы найти более элегантный способ вырваться из цепи then.


person mitsos1os    schedule 06.11.2014    source источник


Ответы (1)


В angular есть служба $q, которую можно внедрить в директивы, контроллеры и т. д., что является близкой имплементацией Q Криса Ковала. Таким образом, внутри функции then вместо возврата значения или чего-то еще, что будет привязано к следующему " thenable", просто верните $q.reject('reject reason');

Пример:

angular.module('myQmodule',[])
.controller('exController',['$q',function($q){
  //here we suppose that we have a promise-like function promiseFunction()
  promiseFunction().then(function(result1){
    //do the check we want in order to end chain
    if (endChainCheck) {
      return $q.reject('give a reason');
    }
    return;
  })
  .then(function(){
  //this will never be entered if we return the rejected $q
  })
  .catch(function(error){
   //this will be entered if we returned the rejected $q with error = 'give a reason'
  });
}]);
person mitsos1os    schedule 06.11.2014