Firebase onWrite不会触发

时间:2019-11-24 04:31:29

标签: firebase firebase-realtime-database google-cloud-functions

我正在尝试将A用于B,但不会触发。 当我使用onWrite时,它会触发。

db_uppercaseLog侦听添加到onCreate的新日志,并创建大写版本的日志到db_uppercaseLog

/log/:pushId/original

我已经阅读了文档和参考。在这里也已经阅读了关于stackoverflow的类似问题。但是我不能和我的情况有关。这应该是教科书的例子吧?

我在这里做什么错了?

/log/:pushId/uppercase

1 个答案:

答案 0 :(得分:1)

您的问题源于onWriteonCreate handle data differently,其定义与您所遇到的问题不同。

onCreate((snapshot,context)=>{...})
onWrite((change,context)=>{...})

特别是,Change object是一个容器,其中包含属性afterbefore,代表触发该函数的状态更改。

由于onWrite是一个更改处理程序-如果不进行审核,它可以将自身重新触发为无限循环。在上面的代码中,这不是问题,但需要注意。但是,删除值时会触发您的代码,因此请决定如何处理。

// Listens for changes at /log/:pushId/original and creates an
// uppercase version of the log at /log/:pushId/uppercase
exports.db_uppercaseLog=functions.database
.ref('/log/{pushId}/original')
.onWrite((change,context)=>{
  let afterSnapshot = change.after;

  // onWrite is triggered on deletion
  if (!afterSnapshot.exists()) {
    console.log('cancelled: entry deleted');
    return; // do nothing (could also delete /log/:pushId/uppercase?)
  }

  // Grab the new value written to the Realtime Database and modify it.
  const newValue = afterSnapshot.val();
  const uppercase = newValue.toUpperCase();

  // Set "../uppercase" and returns its operation Promise.
  return afterSnapshot.ref.parent.child('uppercase').set(uppercase);
});