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

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) {

使用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) {
       // 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”
。也许这些观察将有助于…