优化网络请求
This commit is contained in:
parent
4b45ccfce3
commit
3dad368141
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user