我有以下代码:
const getData = async function () {
try {
const response = await fetch(`${API_URL}/cars`, {
signal: AbortSignal.timeout(5_000),
});
console.log(response);
} catch (err) {
console.log(err.name); //AbortError
console.dir(err);
}
};
getData();
在这里,getData使用fetch()
从API端点检索数据,我将请求的signal
属性设置为AbortSignal.timeout(5_000)
以实现超时.
根据MDN文档,AbortSignal.timeout(TIME_IN_MS)
将返回AbortSignal
,它将在指定时间后自动中止.由于按下浏览器停止按钮、关闭标签(或一些其他内置的"停止"操作),信号以TimeoutError
ON超时或AbortError
中止.
我每次运行getData()
时得到的响应是AbortError
和消息The user aborted a request.
,而不是TimeoutError
,即使我将浏览器设置为减慢3G速度并将时间设置为getData()
ms也是如此.我还try 在服务器中将响应时间设置为10秒,在前端将响应时间设置为无限制,并将超时设置为9000毫秒.
为什么我不能拿到TimeoutError
分而只拿到AbortError
分?
更新1:
这个问题似乎只适用于谷歌Chrome和Microsoft Edge等基于 chromium 的浏览器,但在Firefox中可以正常工作.
更新2:
正如@Kaiido所指出的,这似乎不仅是Chromium的错误,也是Safari的错误.问题在以下两种情况下都打开: