Firebase实时数据库从已删除的节点访问数据阵列



我正在删除一个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}/周天数

不要循环数据,因为数据似乎不在了,所以forEach不工作。如何访问此数据并循环删除的数据?

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

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

从数据库中删除的数据实际上包含在对云函数的调用中。您可以从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;
...
})

最新更新