gpt4 book ai didi

angularjs - 如何在响应拦截器中再次发送请求?

转载 作者:行者123 更新时间:2023-12-03 09:06:37 24 4
gpt4 key购买 nike

我在应用程序中创建了一个侦听器,用于检测 session 丢失(服务器发送HTTP 419)。在这种情况下,我需要从服务器请求一个新的 session ,然后我想自动再次发送原始请求。
也许我可以将请求保存在请求拦截器中,然后再次发送,但是可能有一个更简单的解决方案。

请注意,我必须使用特定的Web服务来创建 session 。

angular.module('myapp', [ 'ngResource' ]).factory(
'MyInterceptor',
function ($q, $rootScope) {
return function (promise) {
return promise.then(function (response) {
// do something on success
return response;
}, function (response) {
if(response.status == 419){
// session lost
// create new session server-side
// Session.query();
// then send current request again
// ???
}
return $q.reject(response);
});
};
}).config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('MyInterceptor');
});

最佳答案

这是我对有兴趣的人使用 promise 的解决方案。基本上,您需要请求一个新 session ,然后等待响应,然后再发送与原始请求相对应的新请求(使用response.config)。通过返回promise $ http(response.config),您可以确保将响应视为原始请求。
(语法可能不是最好的,因为我是新来的 promise )

angular.module('myapp', [ 'ngResource' ]).factory(
'MyInterceptor',
function ($q, $rootScope) {
return function (promise) {
return promise.then(function (response) {
// do something on success
return response;
}, function (response) {
if(response.status == 419){
// session lost
var Session = $injector.get('Session');
var $http = $injector.get('$http');
// first create new session server-side
var defer = $q.defer();
var promiseSession = defer.promise;
Session.query({},function(){
defer.resolve();
}, function(){
// error
defer.reject();
});
// and chain request
var promiseUpdate = promiseSession.then(function(){
return $http(response.config);
});
return promiseUpdate;
}
return $q.reject(response);
});
};
}).config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('MyInterceptor');
});

关于angularjs - 如何在响应拦截器中再次发送请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18638211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com