Node.js异步执行求助:文件系统删除后需完成数据库删除
改造Node.js删除操作的Async/Await实现
嘿,我来帮你把这段代码改成更清晰的async/await写法,顺便梳理下逻辑里的小问题~
首先先明确你的核心需求:先执行文件系统的删除操作,再完成数据库(DDBB)的删除(因为需要先查询数据库再执行删库操作),现在用Promise链式调用有点绕,想换成async/await但没搞定对吧?
先看你现有代码里的冗余点:你的deleteApplicationInFileSystem方法其实没必要手动包裹一层Promise,因为this.registryService.deleteApplicationInFileSystem本身已经返回Promise了,完全可以简化。
接下来直接上改造后的完整代码,我会逐段解释:
第一步:简化文件系统删除方法
// 直接返回已有Promise,无需手动封装 public deleteApplicationInFileSystem = (request: any): Promise<void> => { // 注意:这里的param1/param2/param3需要你从request里提取实际参数 return this.registryService.deleteApplicationInFileSystem(param1, param2, param3); }
第二步:用Async/Await改造主删除方法
// 给方法添加async关键字,标记为异步方法 public deleteApplication = async (request: any, response: Response): Promise<void> => { try { // 等待文件系统删除操作完成 await this.deleteApplicationInFileSystem(request); // 补充:这里执行你的数据库查询逻辑(原代码中未体现,记得补全) // const applicationInfo = await this.registryService.queryApplicationInDDBB(xxx); // 等待数据库删除操作完成 await this.registryService.deleteApplicationVersionInDDBB(parm1, parm2, param3); // 所有操作成功,返回200响应 response.status(200).json({ response: "Done." }); } catch (err) { // 统一捕获所有异步错误,区分不同错误类型 const errorContent = err instanceof Error ? err.message : String(err); if (errorContent.split(",")[0] === "fieldNotFoundError") { response.status(404).json({ response: { errorMessage: 'error 1' } }); } else if (err) { response.status(400).json({ response: 'Error deleting application from the file system' }); } else { response.status(400).json({ response: { errorMessage: 'error 2' } }); } } }
关键改造点说明
- 消除Promise嵌套:async/await把原本嵌套的
.then().catch()改成了类似同步代码的线性逻辑,可读性大幅提升,新手也更容易跟进执行流程。 - 统一错误处理:用单个
try-catch块捕获所有异步操作的错误,避免了多层.catch()的回调地狱问题。 - 移除冗余Promise封装:原方法里手动包裹Promise是新手常犯的小错误,直接返回已有Promise即可。
另外提醒你:原代码中数据库删除的部分被注释掉了,记得把查询数据库的逻辑补上,再执行删库操作,这样就完全符合你“先查库再删库”的需求啦。
内容的提问来源于stack exchange,提问作者novita
相关产品推荐
相关产品推荐

