From 3dad36814106687120d09fca640a97a646cfdf4f Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Thu, 18 Jan 2024 11:32:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BD=91=E7=BB=9C=E8=AF=B7?= =?UTF-8?q?=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chain/chain.api.ts | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/chain/chain.api.ts b/src/chain/chain.api.ts index 8d4cfaf..750a5dc 100644 --- a/src/chain/chain.api.ts +++ b/src/chain/chain.api.ts @@ -1,19 +1,21 @@ -import fetch, { Response } from 'node-fetch' +import fetch, { Response, RequestInit } from 'node-fetch' import { retry } from 'utils/promise.util' -// AbortController was added in node v14.17.0 globally + +const DEFAULT_TIMEOUT = 30000 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 timeout = setTimeout(() => controller.abort(), 30000) - let res: Response - try { - res = await fetch(url, { ...options, signal: controller.signal }) - clearTimeout(timeout) - } catch (err) { - clearTimeout(timeout) - throw err - } + let res = Promise.race([ + await fetch(url, { ...options, signal: controller.signal }), + new Promise((_, reject) => + setTimeout(() => { + controller.abort() + reject(new Error('timeout')) + }, options.timeout), + ), + ]) return res }