Node.js开发产品分类功能报Unhandled Promise Rejection Warning如何解决
错误原因
await接收状态为rejected的Promise时会直接抛出异常,你当前的controller代码没有用try/catch包裹await逻辑,当service中数据库操作失败走reject(false)时,这个异常没有被捕获,就触发了未处理Promise拒绝的报错。- 额外优化点:
ProductCategory.create本身已经返回Promise,你在service中额外套一层new Promise属于冗余代码,可以直接简化。
修复方案
方案1:修改controller添加异常捕获(推荐,符合async/await的规范用法)
修改productCatController.js代码如下:
module.exports.createProductCat = async (request, response)=> { try { let result = await productCatService.createProductCat(productCatData); responseService.successWithData(response, "Product Category Created"); } catch (error) { // 这里error就是service中reject的false responseService.errorWithMessage(response, error); } }
方案2:修改service不使用reject,统一用resolve返回结果
如果你不想修改controller的原有逻辑,也可以调整service的Promise处理,把失败场景也走resolve返回,同时简化冗余的Promise包装:
// productCatService.js 简化后代码 module.exports.createProductCat = async (productCatData) => { const productCat = { name: productCatData.name, desc: productCatData.desc, count: productCatData.count, status: productCatData.status }; try { await ProductCategory.create(productCat); return true; } catch (error) { return false; } }
修改后controller的原有代码不需要改动,就能正常走if/else的分支判断。
内容的提问来源于stack exchange,提问作者Sameera
相关产品推荐
相关产品推荐

