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
相关产品推荐
相关产品推荐

