我正在删除一个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无法工作。如何访问这些数据并循环已删除的数据?
发布于 2020-11-15 05:15:38
从数据库中删除的数据实际上包含在对云函数的调用中。你可以从change.before那里得到。
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;
...
})发布于 2020-11-15 04:19:01
当然,您将无法读取刚刚删除的数据。函数在完成删除后运行。如果您想获取刚刚删除的数据,则应该使用change.before,如文档中所述
Change对象具有一个
before属性,它允许您在事件发生前检查保存到实时数据库的内容。and属性返回一个DataSnapshot,其中所有方法(例如,val()和())都引用了前面的值。通过使用原始DataSnapshot或读取after属性,您可以再次读取新值。任何更改上的此属性都是表示事件发生后数据的状态的另一个DataSnapshot。
https://stackoverflow.com/questions/64841112
复制相似问题