首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从删除节点实时访问数据库数组

从删除节点实时访问数据库数组
EN

Stack Overflow用户
提问于 2020-11-15 04:07:54
回答 2查看 49关注 0票数 0

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

代码语言:javascript
复制
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无法工作。如何访问这些数据并循环已删除的数据?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-15 05:15:38

从数据库中删除的数据实际上包含在对云函数的调用中。你可以从change.before那里得到。

代码语言:javascript
复制
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;
    ...
})
票数 0
EN

Stack Overflow用户

发布于 2020-11-15 04:19:01

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

Change对象具有一个before属性,它允许您在事件发生前检查保存到实时数据库的内容。and属性返回一个DataSnapshot,其中所有方法(例如,val()和())都引用了前面的值。通过使用原始DataSnapshot或读取after属性,您可以再次读取新值。任何更改上的此属性都是表示事件发生后数据的状态的另一个DataSnapshot。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64841112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档