优化网络请求

This commit is contained in:
CounterFire2023 2024-01-18 11:32:38 +08:00
parent 4b45ccfce3
commit 3dad368141

View File

@ -1,19 +1,21 @@
import fetch, { Response } from 'node-fetch' import fetch, { Response, RequestInit } from 'node-fetch'
import { retry } from 'utils/promise.util' import { retry } from 'utils/promise.util'
// AbortController was added in node v14.17.0 globally
const DEFAULT_TIMEOUT = 30000
const AbortController = globalThis.AbortController const AbortController = globalThis.AbortController
const request = async (url: string, options: any) => { const request = async (url: string, options: RequestInit) => {
options.timeout = options.timeout || DEFAULT_TIMEOUT
const controller = new AbortController() const controller = new AbortController()
const timeout = setTimeout(() => controller.abort(), 30000) let res = Promise.race([
let res: Response await fetch(url, { ...options, signal: controller.signal }),
try { new Promise<Response>((_, reject) =>
res = await fetch(url, { ...options, signal: controller.signal }) setTimeout(() => {
clearTimeout(timeout) controller.abort()
} catch (err) { reject(new Error('timeout'))
clearTimeout(timeout) }, options.timeout),
throw err ),
} ])
return res return res
} }