fetch如果出现400错误,不会抛出错误吗

本人github

正确的,当使用 fetch API 进行网络请求时,如果服务器返回一个 4xx(例如 400 Bad Request)或 5xx(例如 500 Internal Server Error)等错误状态码,fetch 不会自动抛出一个错误。相反,fetch 仅在遇到阻止请求完成的网络故障时(例如网络中断)才会抛出错误。对于 HTTP 错误状态码,fetch 会正常解析响应,并将其视为已成功解决(resolved)的 Promise

这意味着你需要手动检查响应的 .ok 属性,该属性是一个布尔值,当响应的状态码在 200-299 的范围内时为 true,表示请求成功。如果 .ok 属性为 false,你可以抛出一个错误或以其他方式处理这种情况。

示例:处理 fetch 中的 400 错误

fetch('https://example.com/data')
  .then(response => {
    if (!response.ok) {
      // 抛出一个错误,包括状态码和状态文本
      throw new Error('Network response was not ok: ' + response.statusText);
    }
    return response.json(); // 解析 JSON 数据
  })
  .then(data => {
    console.log(data); // 处理数据
  })
  .catch(error => {
    console.error('There has been a problem with your fetch operation:', error);
  });

在这个示例中,如果响应的 .ok 属性为 false(意味着状态码不在 200-299 范围内),将抛出一个错误。这个错误随后会被 .catch() 块捕获,允许你统一处理成功请求和错误情况。

为什么 fetch 不自动抛出错误?

fetch 的设计哲学是:只要服务器的响应可以接收,不管其 HTTP 状态码如何,都应该由开发者来决定如何处理这个响应。这提供了更大的灵活性,因为在某些应用场景中,一个 4xx 或 5xx 的响应可能包含对开发者有用的信息,并不总是代表一个无法恢复的错误状态。

总之,使用 fetch 时,你应该总是检查响应的 .ok 属性或直接检查 .status 属性,以便正确处理所有可能的响应状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我想要身体健康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值