我正在尝试将A
用于B
,但不会触发。
当我使用onWrite
时,它会触发。
db_uppercaseLog
侦听添加到onCreate
的新日志,并创建大写版本的日志到db_uppercaseLog
/log/:pushId/original
我已经阅读了文档和参考。在这里也已经阅读了关于stackoverflow的类似问题。但是我不能和我的情况有关。这应该是教科书的例子吧?
我在这里做什么错了?
/log/:pushId/uppercase
答案 0 :(得分:1)
您的问题源于onWrite
和onCreate
handle data differently,其定义与您所遇到的问题不同。
onCreate((snapshot,context)=>{...})
onWrite((change,context)=>{...})
特别是,Change object是一个容器,其中包含属性after
和before
,代表触发该函数的状态更改。
由于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);
});