【问题标题】:Firebase real time database access data array from deleted nodeFirebase 实时数据库访问来自已删除节点的数据数组
【发布时间】:2020-11-15 04:07:54
【问题描述】:

我正在删除一个 FRTDB 节点,我想从该节点访问已删除的数据。功能如下:

exports.events = functions.database.ref('/events/{eventId}').onWrite(async (change, context) => {
  const eventId = context.params.eventId
  if (!change.after.exists() && change.before.exists()) {
    //data removed
    return Promise.all([admin.database().ref(`/events/${eventId}/dayofweek`).once('value')]).then(n => {
      const pms = []
      const days = n[0]
      days.forEach(x => {
        pms.push(admin.database().ref(`${change.before.val().active ? 'active' : 'inactive'}/${x.key}/${eventId}`).set(null))
      })
      return Promise.all(pms)
    });
   else {
    return null;
  }
})

我遇到的问题是

admin.database().ref(`/events/${eventId}/dayofweek

不要循环数据,因为数据似乎不再存在,所以 forEach 不起作用。如何访问这些数据并循环删除的数据?

【问题讨论】:

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


    【解决方案1】:

    当然,您将无法读取刚刚删除的数据。该函数删除完成后运行。如果您想获取刚刚删除的数据,您应该使用change.before,如documentation中所述:

    Change 对象有一个before 属性,可以让您检查什么是 在事件发生前保存到实时数据库。之前的属性 返回一个 DataSnapshot,其中所有方法(例如 val() 和 exists()) 引用前一个值。您可以读取新值 再次使用原始 DataSnapshot 或读取 after 财产。任何 Change 上的此属性都是另一个 DataSnapshot 表示事件发生后数据的状态。

    【讨论】:

      【解决方案2】:

      从数据库中删除的数据实际上包含在对云函数的调用中。你可以从change.before获取if。

      exports.events = functions.database.ref('/events/{eventId}').onWrite(async (change, context) => {
        const eventId = context.params.eventId
        if (!change.after.exists() && change.before.exists()) {
          //data removed
          days = change.before.val().dayofweek;
          ...
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-16
        • 1970-01-01
        • 1970-01-01
        • 2021-05-08
        • 1970-01-01
        • 2019-10-11
        • 2021-04-13
        相关资源
        最近更新 更多