获取失败的fetch()请求的问题详细信息

时间:2020-10-26 14:31:03

标签: javascript fetch typeerror

我有一个页面,该页面使用fetch()将请求发送到API服务器。服务器位于不同的地址,并且经常存在一些网络问题。为了帮助用户更快地解决此类问题,我希望收到有关引起问题的尽可能多的信息。我已经搜索了很多,没有任何运气。对于所有网络失败请求,我所拥有的只是消息“无法提取”,该消息什么也没有。

我已阅读有关在MDN上处理失败请求的信息:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch 在哪里写以下内容:

当遇到网络错误或在服务器端错误配置CORS时,fetch()承诺将拒绝TypeError,尽管这通常意味着权限问题或类似问题,例如404并不构成网络错误。

换句话说-在错误“无法提取”下可能存在另一种错误。 是否有可能以某种方式获取失败的实际原因?

如果另一个接口提供有关失败请求的更多信息,我什至同意使用另一个接口而不是fetch()进行请求。

1 个答案:

答案 0 :(得分:1)

换句话说-在错误“无法提取”下可能存在另一种错误。是否有可能以某种方式获取失败的实际原因?

如果是fetch本身的拒绝,则它是三种错误之一:

  • 初始化请求时出错
  • 一个AbortError,因为请求被中止了
  • 网络错误(最常见的原因)

您可以找到详细信息here。除了拒绝原因类型为ErrorTypeErrorAbortError等)之外,不太可能有很多可用信息

如果这是HTTP错误,则fetch不会拒绝诺言,而是使用一个ok属性为false的Response对象来实现并且其status属性将提供HTTP状态代码(404或类似名称)。您还可以读取错误响应的正文(使用text()方法,如果服务器发回带有错误的JSON文本,则使用json(),等等)。

因此,您至少可以区分中止的请求,网络错误和HTTP错误,而使用HTTP错误,则可以区分是什么类型(404、500等)和服务器可以区分的类型(如果配置为)向您发送有关响应正文中错误的更多信息。