gpt4 book ai didi

javascript - Angularjs $http promise ;从 $http().then(fn1, fn2) 获取回调函数 fn1 和 fn2

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:07:20 26 4
gpt4 key购买 nike

我正在做一个自定义的 Oauth2 身份验证模块。我有一个 requestExecutor 工厂:

     $http({
url: requestObject.url,
method: requestObject.method,
cache: requestObject.cache,
headers: requestObject.headers,
data: requestObject.data})

.then(function (resData) {
if (requestObject.callback) {
requestObject.callback(resData.data);
}
}, function () {
if (requestObject && requestObject.customErrorCallback) {
requestObject.customErrorCallback();
}
});

和 Http 拦截器:

'responseError': function (rejection) {
console.log(rejection)
switch (rejection.status) {
case 401 :
{
$rootScope.$emit(CONST.UNAUTHORIZED);
break;
}
case 403 :
{
$rootScope.$emit(CONST.FORBIDDEN, rejection.config);
break;
}
}
return $q.reject(rejection);
}

所以当我执行请求并得到 403 响应错误从服务器我想将完整的请求发送到 CONST.FORBIDDEN 的监听器(唯一缺少的是来自 $http().then() 的回调> promise )。原因是我想在完成刷新访问 token 后再次执行失败的请求。

我的问题是:

  1. $http().then() promise 存储在哪里?
  2. 能否获得 $http().then() promise ?
  3. 我如何实现 2.?

最佳答案

不确定您的意图,可能会有更好的解决方案,但您可以在配置对象中注册回调处理程序并在拦截器中访问它们。 plnkr

但这里有一个更好的设计。 angular-app/securityInterceptor您将在拦截器中进行刷新并再次执行请求。如果第二个请求成功,您将返回结果,该结果将由您的成功/错误处理程序处理。

$scope.fetchAsync = function(forceError) {
function successHandler(result) {
$scope.content = result.data;
}

function errorHandler(result) {
$scope.content = result;
}

$scope.content = 'Loading...';

$http.get(forceError ? 'not-found' : 'test.txt', {
handler: {
success: successHandler,
error: errorHandler
}
}).then(successHandler, errorHandler);
}

$httpProvider.interceptors.push(function($q) {
return {
'responseError': function(rejection) {
console.log(rejection.config.handler);
return rejection;
}
};
});

关于javascript - Angularjs $http promise ;从 $http().then(fn1, fn2) 获取回调函数 fn1 和 fn2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29766688/

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