如何处理 JavaScript 提取错误?
How do I handle JavaScript Fetch errors?
如果 fetch 调用在 Chrome 中失败,那么我得到的唯一错误详细信息是
TypeError: Failed to fetch
在这种情况下,如何向最终用户显示信息性错误消息?
具体来说:
是否可以获取有关获取失败原因的任何详细信息?
例如,如果服务器崩溃,Chrome DevTools 可能会记录 net:ERR_EMPTY_RESPONSE 的控制台消息,但似乎无法从 JavaScript 访问它。
据我所知,答案是否定的;我假设这是出于安全原因,以避免让恶意 JS 通过检查错误消息来找出哪些站点可以访问和哪些站点不可访问。
是否可以将提取错误与其他 TypeError
s 区分开来?
如果我无法获得错误详细信息,我想至少用信息丰富的 "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?
是的,您只需要 catch
仅 fetch
调用中的错误:
fetch(…)
.catch(err => new FetchError(err))
.…
class FetchError extends Error {
constructor(orig) {
super();
this.message = "fetch error";
this.details = orig;
}
}
如果 fetch 调用在 Chrome 中失败,那么我得到的唯一错误详细信息是
TypeError: Failed to fetch
在这种情况下,如何向最终用户显示信息性错误消息?
具体来说:
是否可以获取有关获取失败原因的任何详细信息?
例如,如果服务器崩溃,Chrome DevTools 可能会记录 net:ERR_EMPTY_RESPONSE 的控制台消息,但似乎无法从 JavaScript 访问它。
据我所知,答案是否定的;我假设这是出于安全原因,以避免让恶意 JS 通过检查错误消息来找出哪些站点可以访问和哪些站点不可访问。
是否可以将提取错误与其他 TypeError
s 区分开来?
如果我无法获得错误详细信息,我想至少用信息丰富的 "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?
是的,您只需要 catch
仅 fetch
调用中的错误:
fetch(…)
.catch(err => new FetchError(err))
.…
class FetchError extends Error {
constructor(orig) {
super();
this.message = "fetch error";
this.details = orig;
}
}