gpt4 book ai didi

javascript - 拦截 Angular $http 中的服务器错误并拒绝 Promise

转载 作者:行者123 更新时间:2023-12-03 07:17:42 24 4
gpt4 key购买 nike

我正在使用 Angular HTTP 服务并拦截来自服务器的响应以捕获任何服务器错误并在拒绝 promise 之前对它们执行一些操作(日志记录等)。

顺便说一句,即使状态代码为 200,我有时也会在响应正文中收到诸如验证错误之类的信息。我知道这并不理想,但请不要对此挂断,因为这不是导致我的问题。我想我应该提到它,因为它解释了为什么我要拦截响应和响应错误

$httpProvider.interceptors.push(function($log, $rootScope, $q) {

return {
response: function(response) {

if (response.data && response.data.success === false) {
doSomeStuff(response);
return $q.reject(response);
}
else{
return response;
}

},
responseError: function(rejection) {
doSomeStuff(rejection);
$q.reject(rejection);
}

};

});

然后,我的应用中的典型 HTTP 调用可能如下所示。

$http.post('https://domain.com/api/whatever', data).then(function (response) {
console.log("Don't do this when an error is returned")
});

不幸的是,console.log 始终运行,即使存在 HTTP 错误或嵌入错误的 200 状态。

我确信我只是误解了 $http/$q 在这里的工作原理,有人能够纠正我的错误。

最佳答案

$q.reject(rejection);

返回一个新的被拒绝的 Promise,它不会影响现有 Promise 的状态。事实上,responseError 在这里所做的只是捕获拒绝并返回 undefined 响应。

应该是

    responseError: function(rejection) {
doSomeStuff(rejection);
return $q.reject(rejection);
}

关于javascript - 拦截 Angular $http 中的服务器错误并拒绝 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36345046/

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