You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何延长node-fetch默认超时时间以适配长响应API?

解决node-fetch请求长响应API的超时问题

你遇到的问题是node-fetch默认遵循Node.js http/https模块的10分钟(600000ms)超时限制,而目标API需要15分钟响应,导致请求中断。以下是两种可行的解决方案:

方案1:升级node-fetch到v3+,直接设置超时参数

node-fetch从v3版本开始支持在请求选项中直接指定timeout参数,可以轻松设置更长的超时时间:

const fetch = require("node-fetch");

try {
  const response = await fetch(`https://someurl/?id=${id}`, {
    timeout: 900000 // 15分钟,单位:毫秒
  });
  // 处理响应逻辑
} catch (error) {
  console.error(error);
}

方案2:使用v2版本时,结合AbortController与全局Agent超时设置

如果无法升级node-fetch版本,需要同时修改Node.js http/https模块的全局超时限制,再用AbortController手动控制请求超时:

步骤1:修改全局Agent超时

在代码开头添加以下配置,覆盖http和https请求的默认超时:

const http = require('http');
const https = require('https');

// 设置http请求默认超时为15分钟
http.globalAgent.options.timeout = 900000;
// 设置https请求默认超时为15分钟
https.globalAgent.options.timeout = 900000;

步骤2:用AbortController控制请求超时

const fetch = require("node-fetch");

try {
  const controller = new AbortController();
  // 15分钟后触发终止信号
  const timeoutTimer = setTimeout(() => controller.abort(), 900000);

  const response = await fetch(`https://someurl/?id=${id}`, {
    signal: controller.signal
  });

  clearTimeout(timeoutTimer); // 请求成功后清除定时器
  // 处理响应逻辑
} catch (error) {
  console.error(error);
}

关键说明

你之前找到的Promise.race方法无法解决问题的核心原因:即使你设置了更长的Promise超时,Node.js http模块的10分钟默认超时依然会主动中断请求,必须修改全局Agent的超时参数才能覆盖这个底层限制。

内容的提问来源于stack exchange,提问作者user567

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:57:18