如何处理JavaScript Fetch错误?

Jos*_*ley 22 javascript google-chrome exception fetch-api

如果Chrome中的提取调用失败,那么我收到的唯一错误详细信息就是

TypeError:无法获取

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

特别:

是否有可能获得有关fetch失败原因的任何详细信息?

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

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

是否有可能将获取错误与其他TypeErrors 区分开来?

如果我无法得到错误的详细信息,我想至少用一个信息丰富的"无法访问网站;请稍后再试"消息替换可怕的模糊"获取失败",并且我想做这没有任何显示其他消息的风险TypeError.

我在这里找到的唯一解决方案是检查实际情况message,看看是不是"Failed to fetch".这显然是特定于浏览器的; 它适用于Chrome,似乎它可以在Chrome的任何用户语言中使用,而其他浏览器则需要自己的测试和处理.

Ber*_*rgi 9

网络/许可/输入问题似乎没有更多细节.

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

是的,您只需要catch来自fetch通话中的错误:

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

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