angularjs – 如何处理Angular responseError拦截器中的多个响应
发布时间:2020-12-17 07:02:14 所属栏目:安全 来源:网络整理
导读:我目前正在使用以下代码重新抛出从我的API返回401的请求: responseError: function(rejection) { var authData = localStorageService.get('authorizationData'); if (rejection.status === 401 authData) { var authService = $injector.get('authService'
我目前正在使用以下代码重新抛出从我的API返回401的请求:
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); } 这对于1个请求非常有用,但是如果我从单个页面返回两个401,则它似乎不起作用,例如当页面加载两个api调用以填充不同的部分时.如何让我的拦截器重新抛出多个延期调用? 此外,拦截器不应该单独为每个401射击吗?不理想,它会在单个页面上引起多次刷新调用,但由于调用未被重新抛出而导致数据缺失. 截图: 解决方法
一种方法是保存令牌保证并链接第二次和后续重试,直到令牌刷新完成:
responseError: function(rejection) { var authService = $injector.get('authService'); var $http = $injector.get('$http'); var tokenPromise = null; var authData = localStorageService.get('authorizationData'); if (rejection.status === 401 && authData) { if (!tokenPromise) { tokenPromise = authService.refreshToken() .finally(function() { tokenPromise = null; }); }; return tokenPromise.then(function () { return $http(rejection.config); }); } else { throw rejection; } } 在上面的示例中,拒绝处理程序创建一个令牌刷新承诺,然后在令牌刷新结束(满足或拒绝)时使其为空.如果在令牌刷新过程中发生另一次拒绝,则以链接(并延迟)重试,直到令牌刷新XHR完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |