Javascript 无法捕获HTTP请求错误代码429
使用I向端点发出POST请求并捕获如下错误:Javascript 无法捕获HTTP请求错误代码429,javascript,http,fetch-api,Javascript,Http,Fetch Api,使用I向端点发出POST请求并捕获如下错误: fetch(new Request(url, { method: 'POST', headers: { ...defaultHeaders, ...headers } , credentials: 'include', body: JSON.stringify(body) })).then( // handle correct reponse ).catch( if (err.status === 401) {
fetch(new Request(url, {
method: 'POST',
headers: { ...defaultHeaders, ...headers } ,
credentials: 'include',
body: JSON.stringify(body)
})).then(
// handle correct reponse
).catch(
if (err.status === 401) {
// handle error nicely
} else if (err.status === 429) {
// handle error differently
} else {
// handle error yet another way
}
);
当401错误按预期处理时,当端点以429响应时,代码
else if (err.status === 429) {
// handle error differently
}
永远不会被执行
EDIT1:如果是429,就永远达不到全部捕获量
javascript/浏览器处理401和429状态码的方式是否不同?
如何捕捉429错误并按自己的方式处理?看起来大多是错误的预期。只有当响应的
类型为“error”
时,才会拒绝承诺(因此调用catch
),这似乎仅适用于非常具体、有限的情况
,则fetch()
API仅在“遇到网络错误时拒绝承诺,尽管这通常意味着权限问题或类似问题。”基本上fetch()
仅在用户脱机或发生某些不太可能的网络错误(如DNS查找失败)时才会拒绝承诺
换句话说,具有429响应的请求仍然是成功执行的请求
好消息是fetch提供了一个简单的ok
标志,指示HTTP响应的状态代码是否在成功范围内
fetch("http://httpstat.us/500")
.then(function(response) {
if (!response.ok) {
throw Error(response.statusText);
}
})
是否执行了捕获
?然后,您是否调试了err.status
是否确实是429
?捕捉在401状态代码的情况下执行,但在429的情况下根本不执行。我知道它确实是429,因为错误记录在浏览器的JS控制台中。好吧,所以问题不是否则如果不匹配,那就是fetch
不会拒绝承诺,对吧?@PiotrZakrzewski看起来像是在响应状态为429时fetch API不会拒绝。相反,您可能需要先在中处理它,然后在逻辑中处理它。从规范中可以看出,只有当响应的类型
为“error”
,承诺才会被拒绝,但在这些示例中,承诺总是“cors”
。也许这些观察将有助于…