2016-02-18 2 views
4

Я немного запутался о том, что заявление

return $q.reject(response); 

делает внутри responseError перехватчика.

Я прошел через this article on webdeveasy и one on angular docs, но они не помогли.

Вот мой код (для справки):

(function() { 
    "use strict"; 
    angular.module('xyz').factory('errorResponseInterceptor', ['$q', 'toaster', function ($q, toaster) { 
     return { 
      ... 
      ... 
      ... 
      responseError: function (response) { 
       ... 
       ... 
       //some logic here 
       ... 
       ... 
       if (response.status == 500) { 
         toaster.error({ title: "", body: response.statusText }); 
        return $q.reject(response);//what does this statement does and why do we need to put it here? 
       } 
       return response; 
      } 
     }; 
    }]); 
}()); 

Мой вопрос:

  1. Почему мы должны написать return $q.reject(response)?
  2. Как эта линия влияет на угловое приложение (что он делает)?

ответ

4

Объект $q Объект в Angular позволяет нам определить обещание и обработать поведение, связанное с обещанием. Пример того, как мы могли бы сделать это:

var q = $q.defer() 

//do something 
if(success){ 
    q.resolve() 
} else { 
    q.reject() 
} 

return q 

Что мы делаем здесь является определение объекта обещание и присваиваем его переменной q. Затем мы выполняем некоторую операцию и используем результат этого, чтобы определить, успешно или нет обещание. Вызов .resolve() на объект обещания свидетельствует о том, что обещание вернулось правильно. Точно так же вызов .reject() по обещанию свидетельствует о том, что это не сработало.

Если мы рассмотрим, как мы на самом деле использовать обещание:

SomeFactory.getSomething().then(function(data){ 
    //gets called if promise resolves 
}, function(error){ 
    //gets called if promise rejected 
} 

Таким образом, в этом примере вы предоставили, мы проверяем, чтобы увидеть, если ответ имеет код 500 ошибок, и если это произойдет, мы отвергая обещание, позволяя нам справиться с ошибкой.

В перехватчике responseError у вас есть два варианта относительно того, что вы возвращаете. Если вы вернетесь $q.reject(response), вы продолжаете цепочку событий обработки ошибок. Если вы вернете что-нибудь еще (как правило, новое обещание или ответ), вы указываете, что ошибка была восстановлена ​​и должна рассматриваться как успешная.

Что касается ваших двух пунктов:

1- Вы должны написать эту строку, чтобы указать, что ответ должен быть по-прежнему считается ошибкой.

2- Влияние на угловое приложение заключается в том, что вместо обратного вызова успеха будет вызываться обратный вызов ошибки.

+0

Интересно! Выше ответ просто говорят о философии обещания, что я делаю, это отказ от ответа от перехватчика http. Не могли бы вы рассказать, как ваш ответ полезен в этом контексте? –

+0

Ваш вопрос немного расплывчатый. Вы спрашиваете, что делает строка $ q.reject, или вы спрашиваете, зачем вам это делать в этом контексте? – Spacepotato

+0

Я спрашивал, зачем нам писать это заявление. и какое влияние это оказывает на угловое приложение? –

Смежные вопросы