with then interceptores httpprovider example javascript angularjs interceptor

javascript - then - Alternativa de $ httpProvider.responseInterceptors



httpprovider angularjs (1)

¿Cuál es la alternativa de $ httpProvider.responseInterceptors ya que se suspende en AngularJS V1.3?

Mis interceptores que trabajaban con Angular JS 1.2 ya no funcionan con la versión 1.3

var angularErrorHandling = angular.module(''xx-http-error-handling'', []); angularErrorHandling.config(function ($provide, $httpProvider, $compileProvider) { var elementsList = $(); push function to the responseInterceptors which will intercept the http responses of the whole application $httpProvider.responseInterceptors.push(function ($timeout, $q) { return function (promise) { return promise.then(function (successResponse) { // if there is a successful response on POST, UPDATE or DELETE we display // a success message with green background if (successResponse.config.method.toUpperCase() == ''GET'') { var length = successResponse.data.length; if (length == 0) { var countactivetoaster = $(''#toast-container'').find(''.toast'').length; if (countactivetoaster == 0) { toastr.warning(''No Records Found!'', ''''); } } return successResponse; } else if (successResponse.config.method.toUpperCase() == ''PUT'') { toastr.success(''Data Saved Sucessfully..'', ''''); return successResponse; } else if (successResponse.config.method.toUpperCase() == ''POST'') { toastr.success(''Data Saved Sucessfully..'', ''''); return successResponse; } }, // if the message returns unsuccessful we display the error function (errorResponse) { switch (errorResponse.status) { case 400: // if the status is 400 we return the error toastr.error(''400 error.'', ''''); // if we have found validation error messages we will loop through // and display them if (errorResponse.data.errors.length > 0) { for (var i = 0; i < errorResponse.data.errors.length; i++) { toastr.error(''xx-http-error-validation-message'', ''''); } } break; case 401: // if the status is 401 we return access denied toastr.error(''Wrong email address or password!'', ''''); break; case 403: // if the status is 403 we tell the user that authorization was denied toastr.error(''You have insufficient privileges to do what you want to do!'', ''''); break; case 500: // if the status is 500 we return an internal server error message toastr.error(''Error: <br />'' + errorResponse.data.exceptionMessage != null && errorResponse.data.exceptionMessage.length > 0 ? errorResponse.data.exceptionMessage : errorResponse.data.message, ''''); break; default: // for all other errors we display a default error message toastr.error(''Error '' + errorResponse.status + '': '' + errorResponse.data.message, ''''); } return $q.reject(errorResponse); }); }; }); $compileProvider.directive(''httpErrorMessages'', function () { return { link: function (scope, element, attrs) { elementsList.push($(element)); } }; }); });


Debe utilizar la nueva sintaxis del interceptor (que es más limpio / mejor en mi opinión):

Verá que ahora puede manejar 4 interceptores por separado: request, requestError, response, responseError

// register the interceptor as a service $provide.factory(''myHttpInterceptor'', function($q, dependency1, dependency2) { return { // optional method ''request'': function(config) { // do something on success return config; }, // optional method ''requestError'': function(rejection) { // do something on error if (canRecover(rejection)) { return responseOrNewPromise } return $q.reject(rejection); }, // optional method ''response'': function(response) { // do something on success return response; }, // optional method ''responseError'': function(rejection) { // do something on error if (canRecover(rejection)) { return responseOrNewPromise } return $q.reject(rejection); } }; }); $httpProvider.interceptors.push(''myHttpInterceptor'');

Más información: https://docs.angularjs.org/api/ng/service/$http (capítulo Interceptor)