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

JavaScript递归函数规避请求超限错误失效问题排查

问题分析与修复方案

核心问题

你的代码触发错误进入else分支时,setTimeout的回调虽然递归调用了getImage,但**setTimeout本身不返回Promise**,且你没有在else分支返回任何值,导致当前getImage调用直接返回undefined,后续递归的结果根本无法传递给最初的调用者。

修复后的代码

把setTimeout包装成Promise,让else分支返回这个Promise,确保递归结果能正确传递:

async function getImage(id) {
    console.log('getImage function is running')
    const response = await fetch('/some/api/' + id)

    if(response.ok) {
        return await response.text()
    } else {
        // 将setTimeout包装为Promise,等待延迟完成
        await new Promise(resolve => setTimeout(resolve, 2000))
        // 递归调用并返回结果
        return getImage(id)
    }
}

额外优化建议

  • 增加重试次数限制,避免无限递归(比如超过10次重试就抛出错误)
  • 读取响应头的Retry-After字段,用服务器指定的延迟时间替代固定2秒,更贴合速率限制规范

内容的提问来源于stack exchange,提问作者RyanJMP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:22:05