给出AngularJS中的Ajax请求
$http.get("/backend/").success(callback);
Run Code Online (Sandbox Code Playgroud)
如果启动另一个请求(相同的后端,例如不同的参数),取消该请求的最有效方法是什么.
我有一个角度应用程序,有时会为每个状态执行多个$ http.get请求.该应用程序使用JWT进行用户身份验证和刷新令牌.API服务器会发送401因auth错误而失败的每个请求.我做了一个http interceptor请求带有401错误的刷新令牌的新令牌,然后重新发送原始请求.
问题是,如果一个州例如2 $ http.get请求并且都得到401响应,那么我更新访问令牌两次.显然我只想刷新令牌一次,但我还是想重新发送两个失败的请求.
这是可以实现的,如果可以的话怎么样?
app.factory('AuthInterceptor', function($q, $injector, RESOURCE_URL, API_BASE, authService) {
return {
request: function(config) {
config.headers = config.headers || {};
if (authService.getAccessToken()) {
if (config.url.substring(0, RESOURCE_URL.length) !== RESOURCE_URL) {
config.headers.Authorization = 'Bearer ' + authService.getAccessToken();
}
}
return config;
},
responseError: function(response) {
switch (response.status) {
case 401:
var deferred = $q.defer();
$injector.get("$http").post(API_BASE + '/api/auth/refresh', {refreshtoken: authService.getRefreshToken()}).then(function(r) {
if (r.data.data.accesstoken && r.data.data.refreshtoken && r.data.data.expiresin) {
authService.setAccessToken(r.data.data.accesstoken);
authService.setRefreshToken(r.data.data.refreshtoken);
authService.setExpiresIn(r.data.data.expiresin);
$injector.get("$http")(response.config).then(function(resp) {
deferred.resolve(resp);
},function(resp) …Run Code Online (Sandbox Code Playgroud)