在 Firebase 中使用 onUpdate 函数时,如何检索已更新的记录?

Posted

技术标签:

【中文标题】在 Firebase 中使用 onUpdate 函数时,如何检索已更新的记录?【英文标题】:When using the onUpdate function in Firebase, how do I retrieve the record that has been updated? 【发布时间】:2018-11-29 00:40:48 【问题描述】:

当在 firebase 上使用云函数时,通过 onUpdate 触发器,我如何检索已更新的记录(换句话说,触发函数的记录)?我正在使用 javascript 与 Firebase 数据库交互。

【问题讨论】:

【参考方案1】:

传递给onUpdate 处理函数的第一个参数是Change 对象。这个对象有两个属性,beforeafter,都是DataSnapshot 对象。这些 DataSnapshot 对象描述了触发函数的更改前后的数据库内容。

exports.foo = functions.database.ref('/location-of-interest')
.onUpdate((change) => 
    const before = change.before  // DataSnapshot before the change
    const after = change.after  // DataSnapshot after the change
)

【讨论】:

谢谢!那么常量“之前”和“之后”是否可以像普通对象一样对待?例如:console.log(before.bidAmount)(如果bidAmount是数据库中记录的一个字段) 点击进入我提供给 DataSnapshot 对象的 API 文档链接。您可以使用 val() 方法从快照中获取原始数据。 谁能提供已接受答案的更新链接?所有链接都已损坏 (404) @DougStevenson【参考方案2】:

每https://firebase.google.com/docs/reference/functions/functions.database.RefBuilder#onUpdate

onUpdate(handler) => function(functions.Change containing non-null functions.database.DataSnapshot, optional non-null functions.EventContext)

所以我猜你只需要将回调函数传递给onUpdate(callback) 触发器。根据文档,已更新的记录似乎作为第一个参数传入。我将从在回调函数中记录参数对象开始。

文档里面的例子是:

// Listens for new messages added to /messages/:pushId/original and creates an
// uppercase version of the message to /messages/:pushId/uppercase
exports.makeUppercase = functions.database.ref('/messages/pushId/original')
    .onCreate((snapshot, context) => 
      // Grab the current value of what was written to the Realtime Database.
      const original = snapshot.val();
      console.log('Uppercasing', context.params.pushId, original);
      const uppercase = original.toUpperCase();
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to the Firebase Realtime Database.
      // Setting an "uppercase" sibling in the Realtime Database returns a Promise.
      return snapshot.ref.parent.child('uppercase').set(uppercase);
    );

【讨论】:

以上是关于在 Firebase 中使用 onUpdate 函数时,如何检索已更新的记录?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase auth onUpdate 云功能,用于当用户更新他们的电子邮件时

使用云功能在 Firebase 实时数据库中交换排名 - 游戏

在 Firebase 函数中为实时数据库使用 onWrite 触发器

离线设备上的 Firebase 云功能

当应用程序处于前台时推送通知(使用 Firebase 触发器)

将数据从 firebase 函数返回到应用程序