obecnie używam następujący kod do rethrow wniosek zwracającą 401 z mojego API:Jak obsługiwać wiele odpowiedzi kątowej responseError kolektora
responseError: function(rejection) {
var authData = localStorageService.get('authorizationData');
if (rejection.status === 401 && authData) {
var authService = $injector.get('authService');
var $http = $injector.get('$http');
̶v̶a̶r̶ ̶d̶e̶f̶e̶r̶r̶e̶d̶ ̶=̶ ̶$̶q̶.̶d̶e̶f̶e̶r̶(̶)̶;̶
var promise = authService.refreshToken();
return ̶d̶e̶f̶e̶r̶r̶e̶d̶.̶ promise.then(function() {
return $http(rejection.config);
});
}
return $q.reject(rejection);
}
Działa to doskonale na 1 wniosek, ale nie robi” Wydaje się, że działa, jeśli otrzymam dwa 401 z powrotem z jednej strony, na przykład gdy strona ładuje się dwoma wywołaniami api, aby wypełnić różne sekcje. Jak mogę zmusić przechwytującego do ponownego wyrzucenia wielu odroczonych połączeń?
Również, czy nie należy przechwytywać myśliwcem przechwytującym dla każdego 401 osobno? Nie idealne, spowodowałoby to wielokrotne odświeżanie wywołań na pojedynczej stronie, ale ulepszenie wynikające z braku danych z powodu nieodebrania połączenia.
Zrzut ekranu:
* nie powinno ogień przechwytujących indywidualnie dla każdego 401 * - powinno. Jeśli tak się nie stanie, proszę podać http://stackoverflow.com/help/mcve. Pomocne może być plunk/fiddle, które jest w stanie odtworzyć problem. – estus
Otrzymujesz dwa 401, ponieważ odpalasz równolegle dwa XHR ze zużytymi tokenami. Jaki problem powoduje ten problem? Czy w końcu dostanie poprawne dane dla obu XHR? – georgeawg
@georgeawg Zachowanie, które widzę, to dwie asynchroniczne żądania użyte do zapełnienia ognia strony, oba 401, drugie (?) Żądanie zostanie ponownie wysłane i powiedz, że wybieram na jedno połączenie, pierwszy wybór jest pusty, drugi ma dane. – RandomUs1r