You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:01:01