JavaScript中Save方法仅打印结果无法返回值的问题求助
代码问题及修复方案
核心问题
- 你使用回调形式调用
day.save,回调函数内部的return savedDate仅会将值返回到回调函数作用域,无法传递到外层addBooking函数的返回结果中,且回调异步操作未被等待,函数会在save执行完成前就结束,默认返回undefined。 - 使用
map遍历day.services时,没有对内部异步操作做聚合等待,也没有收集返回结果;此外此处仅需查找匹配的服务项,使用find方法更高效,你当前的写法会把当天所有服务的isAvailable都设为不可用,不符合常规预约业务逻辑。 - 整个
addBooking函数没有顶层返回逻辑,即便异步操作执行完成,也没有将结果向外返回给调用方。 save操作的错误仅做了打印处理,没有向外抛出,上层调用方无法感知到操作失败。
修复后代码
exports.addBooking = async (bookingInfo) => { const { date, serviceId, name, email } = bookingInfo try { const selectedDate = await Day.find({ date }); if (selectedDate.length === 0) return null; // 无对应日期直接返回 const day = selectedDate[0]; // 查找符合条件的可预约服务 const targetService = day.services.find(service => service._id == serviceId && service.reservation == null); if (!targetService) return null; // 无可用预约服务直接返回 // 写入预约信息 targetService.reservation = new Reservation({ name, email }); // 改用promise形式调用save,等待执行完成 const savedDate = await day.save(); console.log("Reserved", savedDate); // 顶层返回结果给调用方 return savedDate; } catch (error) { console.log(error); // 抛出错误供上层逻辑处理 throw new Error(error); } }
内容的提问来源于stack exchange,提问作者John Yacoub
相关产品推荐
相关产品推荐

