Я использую обещание запросить услугу из своего веб-приложения. Если токен недействителен, теперь я хочу спросить у пользователя учетные данные с использованием модального кода, запросить новый токен из бэкэнд, перезапустить неудавшийся запрос и вернуться в блок успеха обещания моего первоначального запроса продолжить, поскольку ничего не произошло ,Ожидание модальных обещаний в перехватчике угловых ошибок
Поэтому я устанавливаю перехватчик ошибок, чтобы поймать 401, и откройте модальный запрос учетных данных. Затем я использую существующий AuthService для запроса токена и возвращает $ http (response.config) с скорректированным токеном.
Вот мой первоначальный запрос:
MyService.getData().then(
function(result) {
console.log("process data");
}
, function(response) {
console.log("error occurred retrieving data");
}
);
Вот моя ошибка перехватчик, реагируя на 401С:
Restangular.setErrorInterceptor(
function(response) {
if (response.status === 401) {
console.log("interceptor catches");
var modal = $uibModal.open({
templateUrl: "frame/view/Relogin.html",
controller: "ReloginController",
});
console.log("opened modal");
return modal.result.then(function(data) {
console.log("get new token");
return AuthService.authenticate(data[0], data[1]).then(
function (token) {
console.log("set new token");
},
function(){
console.log("failed getting new token");
})
.then(function() {
console.log("now rerun request");
return $http(response.config);
});
});
}
return $q.reject(response);
});
Что сейчас происходит, является то, что перехватчик ловит 401, и открывает модальное , Но вместо того, чтобы ждать ввода пользователя сейчас и запроса на бэкэнд для нового токена, теперь появляется код ошибки обещания.
Так выход консоли:
interceptor catches
opened modal
error occurred retrieving data
get new token
set new token
now rerun request
Но я хотел, чтобы это было:
interceptor catches
opened modal
get new token
set new token
now rerun request
process data
Я предполагаю, что есть ошибка в использовании обещания ... Может кто-то помочь?
Спасибо!