不关注具体错误时使用try/catch是否合理?附文件存储API场景
问题解答
这种场景用try/catch完全没问题,甚至是这类重试逻辑里很常规的处理方式,但要注意几个细节避免踩坑:
- 别盲目捕获所有错误:虽然你说不关注错误类型,但最好过滤掉完全没必要重试的情况(比如本地代码写错、网络彻底断了),不然做无效重试纯浪费资源。当然如果你的场景就是只要服务器抛错就重试,全捕获也可以,但尽量缩小范围更稳妥。
- 重试必须加次数限制:别搞无限重试,设个上限(比如最多3次),不然遇到服务器持续报错的情况,会一直循环拖垮程序。
- 尽量区分错误类型:比如
myApiToSaveFile可能因为本地参数问题(哪怕做了sanitization也难保没漏)抛异常,这种情况换UUID重试也没用,所以最好在catch里判断下是不是服务端返回的错误(比如看错误对象里的状态码、标识),再决定要不要重试。
给你贴个简单的伪代码示例:
async function saveUserUploadedFile(filename) { let targetName = sanitizeFilename(filename); let retryTimes = 0; const maxRetryLimit = 3; while (retryTimes <= maxRetryLimit) { try { await myApiToSaveFile(targetName); return; // 成功就直接退出 } catch (err) { retryTimes++; // 到了最大次数还失败,就抛出错误或者做失败处理 if (retryTimes > maxRetryLimit) { throw new Error("文件保存失败,已经重试了3次都没成功"); } // 换成UUID作为新的文件名重试,要不要保留原后缀看你需求 targetName = `${generateUUID()}${getFilenameExtension(filename)}`; } } }
总结下:核心逻辑用try/catch完全合理,重点是配套好重试次数限制、必要的错误过滤,别搞无意义的循环重试。
内容的提问来源于stack exchange,提问作者sal3jfc
相关产品推荐
相关产品推荐

