如何处理 JavaScript 提取错误?

How do I handle JavaScript Fetch errors?

如果 fetch 调用在 Chrome 中失败,那么我得到的唯一错误详细信息是

TypeError: Failed to fetch

在这种情况下,如何向最终用户显示信息性错误消息?

具体来说:

是否可以获取有关获取失败原因的任何详细信息?

例如,如果服务器崩溃,Chrome DevTools 可能会记录 net:ERR_EMPTY_RESPONSE 的控制台消息,但似乎无法从 JavaScript 访问它。

据我所知,答案是否定的;我假设这是出于安全原因,以避免让恶意 JS 通过检查错误消息来找出哪些站点可以访问和哪些站点不可访问。

是否可以将提取错误与其他 TypeErrors 区分开来?

如果我无法获得错误详细信息,我想至少用信息丰富的 "Failed to access the web site; please try again later" 消息替换极其模糊的 "Failed to fetch",并且我想在没有任何错误的情况下执行此操作向其他 TypeError 显示该消息的风险。

我在这里找到的唯一解决方案是检查实际的 message 是否为 "Failed to fetch"。这显然是特定于浏览器的;它适用于 Chrome,似乎它适用于 Chrome 的任何用户语言,其他浏览器需要自己的测试和处理。

networking/permission/input 问题似乎没有更多详细信息。

Is it possible to distinguish fetch errors from other TypeErrors?

是的,您只需要 catchfetch 调用中的错误:

fetch(…)
.catch(err => new FetchError(err))
.…

class FetchError extends Error {
    constructor(orig) {
        super();
        this.message = "fetch error";
        this.details = orig;
    }
}