无法修改已提交的WriteBatch

时间:2020-07-13 07:24:36

标签: node.js google-cloud-firestore triggers google-cloud-functions

我正在尝试批量提交,但是当两个查询都返回某些内容时,我收到错误消息:无法修改已提交的WriteBatch。我应该如何解决这个问题?任何人都可以提出任何解决方案的建议,那就是初始化两个数组并推送batch.commit(),然后解决promise

module.exports = async (change) => {
  try {
    const timerSnapshot = change.before.data().timestamp;
    console.log(timerSnapshot, "before");
    const timerTimestampMinusOne = momentTz(timerSnapshot)
      .tz("Asia/Kolkata")
      .subtract(1, "days")
      .valueOf();
    const timerMinusThreeHours = momentTz(timerSnapshot)
      .tz("Asia/Kolkata")
      .subtract(3, "hours")
      .valueOf();
    const [profileSnapshot, threeHourReminder] = await Promise.all([
      db
        .collection("Profiles")
        .where("lastQueryFrom", ">", timerTimestampMinusOne)
        .get(),
      db
        .collection("Profiles")
        .where("lastQueryFrom", ">", timerMinusThreeHours)
        .get(),
    ]);
    const batch = db.batch();
    const batchArray = [];
    console.log(profileSnapshot.docs.length, "profile");
    console.log(threeHourReminder.docs.length, "three");
    profileSnapshot.forEach((doc) => {
      batch.set(
        db.collection("Timers").doc(getISO8601Date()),
        {
          timestamp: momentTz().tz("Asia/Kolkata").valueOf(),
        },
        { merge: true }
      );
      batchArray.push(batch.commit());
    });

    threeHourReminder.forEach((doc) => {
      batch.set(
        db.collection("Timers").doc(getISO8601Date()),
        {
          timestamp: momentTz().tz("Asia/Kolkata").valueOf(),
        },
        { merge: true }
      );
      batchArray.push(batch.commit());
    });

    await Promise.all(batchArray);
  } catch (error) {
    console.error(error);
  }
};

0 个答案:

没有答案