搜尋

首頁  >  問答  >  主體

如何增加 axios 請求的逾時時間?

我對 JavaScript/TypeScript 比較陌生(仍在學習),並且一直在嘗試使用 fetch 和 axios 發出請求,但遇到了網路連線問題。我收到的錯誤是:

cause: AggregateError
      at internalConnectMultiple (node:net:1102:18)
      at internalConnectMultiple (node:net:1161:5)
      at Timeout.internalConnectMultipleTimeout (node:net:1644:3)
      at listOnTimeout (node:internal/timers:575:11)
      at process.processTimers (node:internal/timers:514:7) {
    code: 'ENETUNREACH',
    [errors]: [
      Error: connect ENETUNREACH 2001:67c:4e8:f004::9:443 - Local (undefined:undefined)
          at internalConnectMultiple (node:net:1160:40)
          at Timeout.internalConnectMultipleTimeout (node:net:1644:3)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -101,
        code: 'ENETUNREACH',
        syscall: 'connect',
        address: '2001:67c:4e8:f004::9',
        port: 443
      }
    ]
  }
}

Node.js v20.3.1

我認為程式碼不必要,只需使用 axios({"url": "https://example.com"})

網路速度很慢而且不穩定,但我可以存取網路。這些請求與其他實用程式(例如curl或Python中的請求)一起工作得很好(第一次嘗試使用兩者),因此排除了我的電腦或網路配置的任何問題。

fetch 和 axios 實際上都可以工作,但我被迫不斷重試(最多 200 次),直到它決定工作。我嘗試將 { timeout: 0 }{ timeout: 5000 } 傳遞給 axios 建構函數,但沒有成功。

我也嘗試過這個,但似乎沒有任何效果:

const source = CancelToken.source();
const timeout = setTimeout(() => {
  source.cancel();
}, 10000);

axios.get(ip + '/config', {cancelToken: source.token}).then((result) => {
  clearTimeout(timeout);
  // ...
});
axios.get('/foo/bar', {
   signal: AbortSignal.timeout(5000) //Aborts request after 5 seconds
}).then(function(response) {
   // ...
});

P粉293550575P粉293550575452 天前630

全部回覆(1)我來回復

  • P粉814160988

    P粉8141609882023-09-07 10:18:52

    您可以使用 timeout 屬性作為可傳遞給 axios 的設定選項之一。

    https://axios-http.com/docs/req_config

    您也可以變更其預設值,而不是每次都使用 timeout 屬性:

    const instance = axios.create();
    instance.defaults.timeout = 2500;

    https://axios-http.com/docs/config_defaults

    #

    回覆
    0
  • 取消回覆