无法捕获HTTP请求错误代码429

时间:2017-09-15 13:11:00

标签: javascript http fetch-api

使用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错误并按照我的方式处理?

1 个答案:

答案 0 :(得分:3)

看起来很像错误的期望。只有当响应的catchtype时,才会拒绝承诺(因此会调用"error"),这似乎只适用于非常具体的有限情况。

  

Per MDNfetch() API仅在遇到“网络错误时拒绝承诺,但这通常意味着权限问题或类似问题。”基本上{{1}如果用户处于脱机状态,或者发生一些不太可能的网络错误,则会拒绝承诺,例如DNS查找失败。

换句话说,具有429响应的请求仍然是成功执行的请求。

  

好消息是fetch提供了一个简单的fetch()标志,指示HTTP响应的状态代码是否在成功范围内。

ok
     

https://www.tjvantoll.com/2015/09/13/fetch-and-errors/