You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:06:03