Невозможно изменить запись, которая была зафиксирована в облачных функциях - PullRequest
0 голосов
/ 24 августа 2018

Я развертываю этот код в облачных функциях, получая Невозможно изменить зафиксированный WriteBatch, я пытался зафиксировать после получения каждой коллекции, но это неверный способ и является непоследовательным, не удалось обнаружить ошибку после попытки в течение нескольких часов.Также в коде, запускаемом в первый раз после холодного запуска, в этом посте есть та же проблема Пакетная запись в firebase cloud firestore , где создается

новая партия для каждого набора записей.в этом коде.

 var batch = db.batch();
      db.collection("myposts")
        .doc(post_id)
        .collection("fun")
        .get()
        .then(snapshot => {
          return snapshot.forEach(doc => {
            batch.delete(doc.ref);
          });
        })
        .then(
          db
            .collection("relations_new")
            .where("uid", "==", uid)
            .get()
            .then(snapshot => {
              return snapshot.forEach(doc => {
                batch.delete(doc.ref);
              });
            })
        )
        .then(
          db
            .collection("relation")
            .where("uid", "==", uid)
            .get()
            .then(snapshot => {
              return snapshot.forEach(doc => {
                batch.delete(doc.ref);
              });
            })
            .catch(err => {
              console.log(err);
            })
        )

        .then(
          db
            .collection("posts")
            .doc(post_id)
            .get()
            .then(snap => {
              return batch.delete(snap.ref);
            })
            .then(batch.commit())
        )
        .catch(err => {
          console.log(err);
        });`

1 Ответ

0 голосов
/ 24 августа 2018

Убедитесь, что вы возвращаете обещания из ваших тогдашних функций и, в конечном итоге, возвращаете обещания из вашей облачной функции.ESLint - отличный инструмент для выявления ошибок такого рода.


  let batch = db.batch();
  return db.collection("myposts").doc(post_id)
    .collection("fun").get()
    .then(snapshot => {
      snapshot.forEach(doc => {
        batch.delete(doc.ref);
      });

      return null;
    })

    .then(() => {
      return db.collection("relations_new")
        .where("uid", "==", uid)
        .get();
    })

    .then(snapshot => {
      snapshot.forEach(doc => {
        batch.delete(doc.ref);
      });

      return null;
    })

    .then(() => {
      return db.collection("relation")
        .where("uid", "==", uid)
        .get();
    })

    .then(snapshot => {
      snapshot.forEach(doc => {
        batch.delete(doc.ref);
      });

      return null;
    })

    .then(() => {
      return db.collection("posts").doc(post_id).get();
    })

    .then(snap => {
      batch.delete(snap.ref);
      return null;
    })

    .then(() => {
      return batch.commit();
    })

    .then(() => {
      console.log("Success");
      return null;
    })

    .catch(err => {
      console.log(err);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...