javascript - 如何根据子云功能删除 Firebase 中的某个父节点
问题描述
我想要做的是能够遍历每个具有特定 feedId 的人,我一直在尝试这种方式,但目前没有运气。有人可以提供帮助吗?
function clearAllPostsInOwnFeed(userId) {
return admin
.database()
.ref(constants.FBC_USERS_FEEDS + '/' + userId)
.once('value')
.then((snapshot) => {
snapshot.forEach((snap) => {
if (snap.child('fromId').val() === userId) return snap.remove()
return snap
})
console.log(snapshot)
return snapshot
})
}
解决方案
您当前正在从内部回调返回快照。由于这不是一个承诺,它会立即解决 - 您的函数将被终止。在它删除节点之前。
最简单的修复方法是使用Promise.all()
等待所有删除完成:
function clearAllPostsInOwnFeed(userId) {
return admin
.database()
.ref(constants.FBC_USERS_FEEDS + '/' + userId)
.once('value')
.then((snapshot) => {
let promises = []
snapshot.forEach((snap) => {
if (snap.child('fromId').val() === userId) {
promises.push(snap.ref.remove())
}
})
return Promise.all(promises);
})
}
或者,您可以使用多路径更新通过一次写入擦除所有匹配节点:
function clearAllPostsInOwnFeed(userId) {
const ref = admin
.database()
.ref(constants.FBC_USERS_FEEDS + '/' + userId);
return ref
.once('value')
.then((snapshot) => {
let updates = {};
snapshot.forEach((snap) => {
if (snap.child('fromId').val() === userId) {
updates[snap.key] = null;
}
})
return ref.update(updates);
})
}
推荐阅读
- java - JBoss EAP 7.1.6、CDI 1.2 和排除扫描不起作用
- python - 从命令行运行的程序,但不是从 pyinstaller 创建的可执行文件
- java - InaccessibleObjectException after migrating from Java 8 to Java 11
- python - 是否有随机图像生成的功能
- php - 无法从 php 运行 python 脚本
- yii2 - 自定义模型属性的验证错误未显示在表单中
- windows - Wireshark 无法加载自定义插件
- apache-spark - 使用 Spark 和 Elastic Search 时在 Kafka 中存储偏移的正确方法
- ffmpeg - ffmpeg 将传入的 RTP 音频仅流保存到文件
- javascript - 如果在 ELSE 被接受后无法工作(潜在的 Leaflet.Draw 问题)