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
相关产品推荐
相关产品推荐

