Официальный restangular документации provides этот образец кода, чтобы повторить запрос в ErrorInterceptor:Retry на Restangular вызов в перехватчика
var refreshAccesstoken = function() {
var deferred = $q.defer();
// Refresh access-token logic
return deferred.promise;
};
Restangular.setErrorInterceptor(function(response, deferred, responseHandler) {
if(response.status === 403) {
refreshAccesstoken().then(function() {
// Repeat the request and then call the handlers the usual way.
$http(response.config).then(responseHandler, deferred.reject);
// Be aware that no request interceptors are called this way.
});
return false; // error handled
}
return true; // error not handled
});
Однако, как говорится в комментариях, то вторая попытка не вызовет никаких перехватчиков потому что он напрямую использует $ http.
Есть ли способ сделать второй запрос также через ретрансляционный конвейер и выполнить ErrorInterceptor?
вы можете заменить '$ http (response.config) .then (responseHandler, deferred.reject);' с вызовом restApi. Используйте перехватчики $ http вместо перестановочного перехватчика, даже с restangular.Я предпочитаю перехватчики $ http, потому что все обертки angilejs api, такие как restangular, используют внутри $ http под капотом ... – harishr
Вопрос ** о ** переключается с '$ http' на' Restangular' в перехватчике. Не путайте «Restangular» с простым вызовом отдыха. –