我正在删除一个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;
...
})