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

if条件中await不生效求助:MongoDB文档保存无法等待完成

问题根源

你用await event.save(回调函数)的写法有误——Mongoose的save()方法如果传入回调函数,就不会返回Promise,await根本无法等待异步保存操作完成,导致后续的console.log(response)会直接执行,拿到的还是未被回调修改的初始response值。

解决方法

去掉save的回调函数,改用Promise的try/catch写法,让await能正常等待保存操作完成:

修改后的代码:

const properties = ["name", "description", "type", "permission", "color"];

const addEvent = async (eventInfo, api_call = true) => {
    let response = { success: true };

    for (let prop of properties) {
        if (prop !== "permission" && !eventInfo.hasOwnProperty(prop)) {
            response.success = false;
            response.message = `${prop} field is not given.`;
            break;
        }
    }

    if (response.success) {
        let event = new Event(eventInfo);
        try {
            // 移除回调,直接await save返回的Promise
            await event.save();
            response.message = "Event Added.";
        } catch (err) {
            response.success = false;
            response.message = err.message;
            console.log(response);
        }
        // 现在这里的console.log会等待save完成后执行
        console.log(response);
    }

    // 因为addEvent是async函数,本身已返回Promise,无需再额外包装
    if (api_call) {
        return response.success ? response : Promise.reject(response);
    }
};
额外优化说明
  • 原代码中return new Promise属于冗余写法,async函数默认返回Promise,直接返回结果或使用Promise.reject()即可
  • 字符串拼接改用模板字符串,写法更简洁直观

内容的提问来源于stack exchange,提问作者Ashutosh Bajpai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:24:16