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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:45:08