如何在云端防火墙中回滚操作?

时间:2018-04-07 06:25:37

标签: google-cloud-firestore google-cloud-functions

我创建了一个云函数来更新我的数据库中文档中的字段。但是我用NaN替换了实际值我知道这个链接Cloud function is writing NaN to firestore是什么。但我想回滚操作,以便该字段获得其值。如何可能?

1 个答案:

答案 0 :(得分:1)

您可以尝试编写新更新。如果成功,您的.then可以解决承诺,功能可以结束。如果失败,请向.catch添加一些行,以使用change.before.data()

更新文档

然后文档将返回其先前的值。

以下是一些示例代码

const admin = require('firebase-admin');
const functions = require('firebase-functions');

admin.initializeApp();

const firestore = admin.firestore();

exports.myFunction = functions.firestore
  .document('myCollection/{myDocumentId}')
  .onUpdate((change, context) => {

  const newValue = change.after.data();
  const oldValue = change.before.data();

  let myChanges = {
    // Update a value
  };

  return change.after.ref.update(myChanges)
    .then(() => {
      console.log('Document updated successfully');
      return Promise.resolve();
    })
    .catch(() => {
      // The update failed and the document needs to be rolled back
      return change.before.ref.set(oldValue);
    })
    .then(() => {
      console.log('Document was rolled back');
      return Promise.resolve();
    })
    .catch(err => {
      console.error(err);
      return Promise.reject(err);
    });
});