使用fetchApi我向端点发出POST请求并捕获如下错误:
FireDAC Links
虽然401错误按预期处理,但当端点响应429代码时
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
}
);
永远不会被执行。
EDIT1:在429
的情况下永远不会达到整个捕获量javascript / browser对401和429状态代码的处理方式有何不同? 如何捕获429错误并按照我的方式处理?
答案 0 :(得分:3)
看起来很像错误的期望。只有当响应的catch
为type
时,才会拒绝承诺(因此会调用"error"
),这似乎只适用于非常具体的有限情况。
Per MDN,
fetch()
API仅在遇到“网络错误时拒绝承诺,但这通常意味着权限问题或类似问题。”基本上{{1}如果用户处于脱机状态,或者发生一些不太可能的网络错误,则会拒绝承诺,例如DNS查找失败。
换句话说,具有429响应的请求仍然是成功执行的请求。
好消息是fetch提供了一个简单的
fetch()
标志,指示HTTP响应的状态代码是否在成功范围内。ok