为什么字典子项不会在Firebase Cloud Functions中删除?



>我在云函数中有一个结构,我在其中检查每个子项,查看其(endDate(值是否已超过当前时间,然后删除已过期的子项

子节点的所有子节点都将被删除,字典子节点"坐标">

除外为什么它没有与其余部分一起被移除?我该怎么做?

exports.removeOldMessages = functions.https.onRequest((req, res) => {
const messagesRef = admin.database().ref('events')
messagesRef.once('value', (snapshot) => {
snapshot.forEach((child) => {
child.forEach((child) => {
if (Number(child.val()['endDate']) <= new Date().getTime()) {
child.ref.set(null)
}
})
})
})
return res.status(200).end()
})

这是 JSON

{   "events" : { "N5iTuYzAbJa02RauxCl3uh2Nggz1" : {  
"-LNmIvSdrwK96KCGcmXm" : {
"addedBy" : "Riyadh Figures",
"coordinate" : [ 24.70914690943994, 46.78851541131735 ],
"endDate" : "1538442801.0",
"imagePath" : "-LNmIvSdrwK96KCGcmXm",
"key" : "-LNmIvSdrwK96KCGcmXm",
"title" : "hjihgf",
"userPicture" : "N5iTuYzAbJa02RauxCl3uh2Nggz1"   } }

once函数返回一个回调,并且您紧随其后退出,因此它可能甚至在返回记录之前就退出了。此外,ref.set返回一个承诺,而您不是在等待它,因此您还需要等待它完成才能退出。

我对实时数据库没有太多经验,但是等待操作完成可能会起作用:

exports.removeOldMessages = functions.https.onRequest((req, res) => {
const messagesRef = admin.database().ref('events')
messagesRef.once('value', (snapshot: DataSnapshot) => {
let promises = []; // Creates an array to hold the promises
snapshot.forEach((snap) => {
snap.forEach((child) => {
if (Number(child.val()['endDate']) <= new Date().getTime()) {
promises.push(child.ref.set(null)) // Add each promise which will then be waited
}
})
})
Promise.all(promises).then(() => res.status(200).end()); // Wait for all promises to finish before completing
})
})

最新更新