2016-08-06 5 views
1

Так что я вытащил перехватчик прямо из угловой документации по HTTP, и все же это все еще не работает. Функции «запрос» и «ответ» вызываются, но никогда не «requestError» или «responseError».Угловой HTTP-перехватчик не работает с ошибками

myApp.config(['$httpProvider', function ($httpProvider) { 
     $httpProvider.interceptors.push(function ($q) { 
      return { 
       'request': function (config) { 
        return config; //gets called 
       }, 

       'requestError': function (rejection) { 
        return $q.reject(rejection); //Never gets called 
       }, 

       'response': function (response) { 
        return response; //gets called 
       }, 

       'responseError': function (rejection) { 
        return $q.reject(rejection); //Never gets called 
       } 
      }; 
     }); 
    }]); 

На сервере я возвращаю 400, но на самом деле любая ошибка будет делать. И вот услуга

User.publicProfileGetProfile = function (value, type) { 
    return $http({ 
     url: '/public/profile/' + type + '/' + value, 
     method: 'GET' 
    }).then(function (response) { 
     return response; 
    }, function(error){ 
     return error; 
    }); 
}; 

Не вызываются функции ошибки, и каждый ответ проходит через функцию ответа. Стандартная угловая ошибка отображается с Bad Request (400), как обычно. Когда возвращается ошибка 400, она просто «не определена» через функцию «ответ» в перехватчике.

Сообщите мне, если я забыл включить какую-либо важную информацию.

ответ

0

Использование return, обработчик ошибки преобразование отказ в успехе. Вместо этого используйте throw, чтобы связать отказ.

User.publicProfileGetProfile = function (value, type) { 
    return $http({ 
     url: '/public/profile/' + type + '/' + value, 
     method: 'GET' 
    }).then(function onSuccess(response) { 
     return response; 
    }, function onReject(error){ 
     //return converts rejection to success 
     //return error; 

     //use throw to chain rejection 
     throw error; 
    }); 
}; 
+0

Так что я сделал это изменение ... однако функция ответа (и все еще неопределенная) все еще вызывается и в контроллере результат ошибки все равно никогда не вызывается. – fjaxyu

+1

Перехватчик 'errorResponse' вызывается для ответов о состоянии 400 в [this JSFiddle DEMO] (https://jsfiddle.net/hawfLnx1/). – georgeawg

+0

Спасибо! Когда я увидел, что JSFiddle работает правильно, я убедился, что мой выглядел точно так же. Когда это не сработало, я осмотрелся, чтобы увидеть, есть ли у меня какие-либо другие перехватчики, которые могут вызвать проблемы. У меня был другой перехватчик, который сначала попал, и возвращал какие-то ошибки в качестве ответов, затем они проходили через это, и он обрабатывал бы его как успешный ответ. Я удалил его, и теперь все работает правильно! – fjaxyu

0

Когда я увидел, что JSFiddle (от @georgeawg) работает должным образом, я уверен, мое выглядел точно так же. Когда это не сработало, я осмотрелся, чтобы увидеть, есть ли у меня какие-либо другие перехватчики, которые могут вызвать проблемы. У меня был другой перехватчик, который сначала попал, и возвращал какие-то ошибки в качестве ответов, затем они проходили через это, и он обрабатывал бы его как успешный ответ. Я удалил его, и теперь все работает правильно!

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