У меня была аналогичная проблема. Проблема с errorInterceptor заключается в том, что она вызывается перед любыми обратными вызовами, поэтому у нас есть возможность делать что-то всегда не только тогда, когда нам это нужно. Я решил эту проблему хакерским способом, поэтому вам решать, будете ли вы использовать ее в своем коде или нет. Прекрасно работает на:
"angular": "1.3.0",
"restangular": "1.4.0",
Сначала я использовать errorInterceptor:
RestangularConfigurer.setErrorInterceptor(function (response, deferred, responseHandler) {
var hasSomeErrback = deferred.promise.$$state.pending.map(function (thenAttachment) {
if (thenAttachment[2]) {
return true
}
else {
return false
}
}).reduce(function (accumulator, value) {
return accumulator || value
}, false)
if (!hasSomeErrback) {
myErrorService.globalError()
}
})
Но вместо вызова глобального обработчика ошибок (myErrorService.globalError()) каждый раз, когда я делаю это только тогда, когда не ошибка обратного вызова зарегистрировано. Это вполне Hacky, так как он использует INTERAL данные объекта обещают, но, кажется, работает, см тесты:
describe('when server responded with error', function() {
beforeEach(function() {
spyOn(myErrorService, 'globalError')
$httpBackend.whenGET('/api/evil').respond(500, 'pure evil')
})
it('should call global error handler if error callback was NOT attached', function() {
myApiClient.all('evil').getList().then(function() {
})
$httpBackend.flush()
expect(myErrorService.globalError).toHaveBeenCalled()
})
it('shouldnt call global error handler if error callback was attached', function() {
myApiClient.all('evil').getList().then(function() {
}, function() {
console.log('Inside local catch')
})
$httpBackend.flush()
expect(myErrorService.globalError).not.toHaveBeenCalled()
})
it('shouldnt call global error handler if error callback was attached using catch', function() {
myApiClient.all('evil').getList().catch(function() {
})
$httpBackend.flush()
expect(myErrorService.globalError).not.toHaveBeenCalled()
})
})
скопирован с HTTP- : //www.ngroutes.com/questions/AUuADiQ_a5vEqxqlK7FY/general-error-handler-for-restangular.html –