我需要捕获错误401响应代码,以便我可以在从令牌端点获取新令牌后重试。我正在使用fetch方法从API获取数据。
const request: Request = new Request(url.toString(), {
headers: this.defaultRequestHeaders,
method: "get",
mode: "cors"
});
const headers: Headers = new Headers({
"Accept": "application/json",
"Content-Type": "application/json"
});
fetch(request)
.then(function(response)
{
///Logic code
})
.catch(function(error)
{
///if status code 401. Need help here
});
答案 0 :(得分:4)
您可以检查状态,如果不是200(确定),则会抛出错误
fetch("some-url")
.then(function(response)
{
if(response.status!==200)
{
throw new Error(response.status)
}
})
.catch(function(error)
{
///if status code 401...
});
答案 1 :(得分:1)
因为401
实际上是对服务器请求的有效响应,所以无论如何都会执行您的有效响应。仅当出现安全问题,或者服务器无响应或根本不可用时,才会使用catch
子句。试想和别人说话就好像想象的那样。即使他们说“我目前无法使用”或“我没有这些信息”,您的对话仍然成功。只有当一个安全人员介入您之间并阻止您与收件人交谈,或者如果收件人死时,会话中是否会出现实际的失败,您是否需要使用catch
。
只需将您的错误处理代码分开,这样您就可以在请求成功但不具备所需结果的情况下处理它,以及就像抛出实际错误时一样:< / p>
function catchError( error ){
console.log( error );
}
request.then(response => {
if( !response.ok ){
catchError( response );
} else {
... Act on a successful response here ...
}
}).catch( catchError );
我在评论中使用@Noface建议的response.ok
,因为它有意义,但如果您愿意,您只能检查response.status === 401
。
答案 2 :(得分:0)
您可以在status
:
then
fetch(request)
.then(function(response) {
if (response.status === 401) {
// do what you need to do here
}
})
.catch(function(error) {});
答案 3 :(得分:0)
您可以尝试
fetch(request)
.then(function(response) {
if (response.status === 401) {
// do what you need to do here
}
})
.catch(function(error) {
console.log('DO WHAT YOU WANT')
});
答案 4 :(得分:0)
(function () {
var originalFetch = fetch;
fetch = function() {
return originalFetch.apply(this, arguments).then(function(data) {
someFunctionToDoSomething();
return data;
});
};})();
答案 5 :(得分:0)
当你想...
catch (error) {
console.dir(error) // error.response contains your response
}
答案 6 :(得分:0)
fetch(url,{
method: 'GET',
headers,
body: JSON.stringify(aData)
}).then(response => {
if(response.ok){
return response.json();
}
return Promise.reject(response);
}).catch(e => {
if(e.status === 401){
// here you are able to do what you need
// refresh token ..., logout the user ...
console.log(e);
}
return Promise.reject(e.json());
});