如果Chrome中的
fetch通话失败,那么我收到的唯一错误信息就是
TypeError: Failed to fetch
特别:
是否可以获得有关为什么fetch失败的任何细节?
例如,如果服务器崩溃,Chrome DevTools可能会记录一个控制台消息:net:ERR_EMPTY_RESPONSE,但似乎没有办法从JavaScript访问.
据我所知,答案是否定的;我认为这是为了安全的原因,以避免让恶意的JS找出哪些站点是不可访问的检查错误消息.
如果我无法得到错误的详细信息,我至少要用一个内容丰富的“无法获取”来替代“无法访问该网站;请稍后重试”的消息,我想做这不会对其他TypeErrors显示该消息的风险.
我在这里找到的唯一解决方案是检查实际的消息,看看它是否“无法获取”.这显然是浏览器特定的;它适用于Chrome,它似乎可以使用Chrome的任何用户语言,而其他浏览器将需要自己的测试和处理.
解决方法
似乎有可能没有更多关于网络/许可/输入问题的细节.
Is it possible to distinguish fetch errors from other TypeErrors?
是的,您只需要捕获来自抓取电话的错误:
fetch(…) .catch(err => new FetchError(err)) .… class FetchError extends Error { constructor(orig) { super(); this.message = "fetch error"; this.details = orig; } }