如何避免AbortSignal.timeout导致fetch超时触发未捕获异常?
解决Fetch超时未捕获异常的最简方案
完全可行,你只需要给fetch返回的Promise添加catch处理,精准识别并忽略超时触发的DOMException即可,不需要改动原有的超时方案:
fetch("/test", { signal: AbortSignal.timeout(2000) }) .then(response => { // 这里处理正常响应逻辑 }) .catch(error => { // 仅忽略超时异常,其他类型错误仍正常抛出或处理 if (!(error instanceof DOMException && error.name === 'TimeoutError')) { throw error; } });
原理很简单:AbortSignal.timeout()触发的超时错误是DOMException实例,且它的name属性固定为TimeoutError。通过在catch里做这个判断,就能只过滤掉超时导致的未捕获异常,其他请求错误(比如网络错误、404等)依然可以正常处理或抛出,不会影响其他逻辑。
内容的提问来源于stack exchange,提问作者Basj
相关产品推荐
相关产品推荐

