我對 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) { // ... });
您可以使用
timeout
屬性作為可傳遞給axios
的設定選項之一。https://axios-http.com/docs/req_config
您也可以變更其預設值,而不是每次都使用
timeout
屬性:https://axios-http.com/docs/config_defaults
#