JavaScript/Node.js中catch块内错误的处理方案咨询
问题解答
核心结论
外层catch块不会捕获自身内部代码抛出的错误,所以你必须在catch块内给Database.delete(user)加上嵌套try-catch,否则删除操作的失败会打断后续逻辑,导致原错误无法被记录。
原因分析
外层catch的职责是捕获其对应try块中抛出的异常,它自身内部执行的代码如果抛出错误,会直接向上层(如果存在)抛出,不会被当前这个catch捕获。如果Database.delete(user)抛出错误,会直接跳过console.log(error)和Database.save(error),导致你连最初的错误都无法保存到数据库,完全不符合需求。
调整后的伪代码
try { const new_user = Database.save(user); MoreCodeThatMightThrowAnError(); // 假设这里抛出错误 } catch (originalError) { if (new_user) { try { Database.delete(user); } catch (deleteError) { // 记录删除失败的错误,保存失败也不用处理 Database.save(deleteError); } } console.log(originalError); // 保存原错误,失败无需处理 Database.save(originalError); }
补充说明
这样调整后,无论删除操作是否成功,都能保证原错误被正常记录;如果删除失败,额外的删除错误也会被尝试保存,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Oscar
相关产品推荐
相关产品推荐

