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

React Native中Firebase Firestore预约数据多场景处理实现咨询

解决方案:Firebase Firestore 预约数据分类与清理

我来帮你搞定这三个需求!先梳理下核心思路:我们需要先把Firestore返回的预约数据转换成可对比的时间对象,再分别筛选今日、未来的预约,同时清理掉已经过期的记录。下面是修改后的完整代码,我会在后面逐一解释每个功能的实现逻辑:

// 先获取当前时间的moment对象,方便后续对比
const now = moment();
const currentDate = now.format("YYYY-MM-DD");

await firebase.firestore()
  .collection("patients")
  .doc(firebase.auth().currentUser.uid)
  .collection("appointment")
  .orderBy("dateTime", "asc")
  .get()
  .then(async (result) => {
    // 初始化两个对象存储分类数据
    const todayAppointments = {};
    const upcomingAppointments = {};
    // 收集需要删除的异步操作
    const deletePromises = [];

    result.docs.forEach((doc) => {
      const data = doc.data();
      const id = doc.id;
      // 解析dateTime字符串成moment对象(注意你的格式是'YYYY-MM-DD-HH:mm',要指定对应格式)
      const appointmentTime = moment(data.dateTime, "YYYY-MM-DD-HH:mm");

      // 1. 判断是否为今日预约,存入对应对象
      if (appointmentTime.format("YYYY-MM-DD") === currentDate) {
        todayAppointments[id] = { id, ...data };
      }
      // 2. 判断是否为今日之后的预约,存入对应对象
      else if (appointmentTime.isAfter(now, "day")) {
        upcomingAppointments[id] = { id, ...data };
      }

      // 3. 判断是否已过期(早于当前时间),如果是则加入删除队列
      if (appointmentTime.isBefore(now)) {
        deletePromises.push(doc.ref.delete());
      }
    });

    // 批量执行删除操作,确保所有过期记录都被清理完成
    await Promise.all(deletePromises);

    // 分发分类后的预约数据(可根据你的redux结构调整action字段)
    dispatch({ 
      type: GET_APPOINTMENT, 
      todayAppointments,
      upcomingAppointments
    });
  });

功能实现细节说明

  • 今日预约存储:通过appointmentTime.format("YYYY-MM-DD") === currentDate精准对比日期,将符合条件的预约以文档ID为键存入todayAppointments对象,方便后续按ID快速访问。
  • 未来预约存储:使用moment的isAfter(now, "day")判断预约日期是否在今天之后(以天为精度),确保只筛选次日及以后的预约,存入upcomingAppointments对象。
  • 过期预约删除:用isBefore(now)判断预约时间是否早于当前时间,将对应的删除操作加入deletePromises数组,最后用Promise.all批量执行,保证所有异步删除操作完成后再分发数据,避免数据不一致问题。

额外优化点

  • 替换了原始代码的map逻辑(会返回无效的undefined项),改用forEach更清晰地处理分类和删除逻辑。
  • 批量删除用Promise.all避免了逐个删除的异步阻塞,提升了执行效率。
  • 统一用moment处理时间对比,避免手动字符串匹配可能出现的格式错误。

内容的提问来源于stack exchange,提问作者Osama Tab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:12:31