遇到对端一直不返回时,fetch 默认不会替业务代码设超时。Node 20+ 可以直接用 AbortSignal.timeout:
const url = "https://example.com/";
try {
const response = await fetch(url, {
signal: AbortSignal.timeout(3000),
});
// fetch 遇到 4xx/5xx 不会自动 reject,状态码还是要自己判断
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.text());
} catch (err) {
if (err?.name === "TimeoutError") {
console.error("请求超时");
} else {
console.error("请求失败:", err?.message);
}
}
环境:Node.js 20+,内置 fetch。超时值按接口特点调,别把网络超时和服务端返回的 HTTP 错误混在一起处理。