能否在Promise失败时切换Base URL并重试直至执行成功?
多Base URL失败重试实现方案
我有5个基础URL(示例:url1、url2、url3、url4、url5),需求是当Promise执行失败时切换Base URL并重试,直到Promise执行成功后停止。现有如下代码雏形,请问是否有可行方案?
const checkToken = async (address: string, chainId: number | null): Promise<boolean> => { try { const baseUrl = url1 ; //.... some code; return something; } catch (error) { throw error; //change baseUrl and try again } }
可行实现方案
把所有备选Base URL存入数组,通过循环逐个尝试请求,直到某个URL请求成功就返回结果;若所有URL都尝试失败,则抛出最终错误。具体代码实现如下:
// 定义所有备选Base URL列表 const baseUrls = [url1, url2, url3, url4, url5]; const checkToken = async (address: string, chainId: number | null): Promise<boolean> => { let lastError: Error | undefined; // 遍历每个Base URL尝试请求 for (const baseUrl of baseUrls) { try { // 替换为你的实际业务逻辑 // 示例:基于当前baseUrl发起请求、处理返回值 const apiResponse = await fetch(`${baseUrl}/token-check`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ address, chainId }) }); const result = await apiResponse.json(); // 根据接口返回处理成需要的布尔值 return !!result.valid; } catch (error) { // 记录当前错误,继续尝试下一个URL lastError = error as Error; console.warn(`Base URL ${baseUrl} 请求失败,尝试下一个`, error); } } // 所有URL尝试失败,抛出最后一次错误 throw lastError || new Error('所有Base URL请求均失败'); }
关键说明
- 使用
for...of循环按顺序遍历URL列表,确保逐个尝试 - 单个URL请求失败时仅记录错误,不立即抛出,继续执行下一轮尝试
- 所有URL尝试失败后,抛出最后一次的错误信息,便于排查问题
- 可根据实际业务需求调整请求方式、参数处理、返回值解析逻辑
内容的提问来源于stack exchange,提问作者Fery1320
相关产品推荐
相关产品推荐

