javascript - 为什么这个子节点没有在 Firebase Cloud Functions 中被删除?
问题描述
我正在尝试在事件节点过期后删除它,并 在删除之前删除事件节点的所有子图像
问题是当时间过去了,我删除了事件节点,除了这个孩子之外,它的所有孩子都被删除了
源代码
exports.removeOldEvents = functions.https.onRequest((req, res) => {
const eventsRef = admin.database().ref('events')
eventsRef.once('value', (snapshot) => {
snapshot.forEach((child) => {
child.forEach((child) => {
if (1000*Number(child.val()['endDate']) <= new Date().getTime()) {
child.ref.set(null)
}
})
})
})
return res.status(200).end()
})
解决方案
由于您多次调用该set()
方法,该方法返回一个承诺,因此您应该使用Promise.all()
以等待所有承诺解决,然后再发回响应。
您的代码的以下改编应该可以工作(但是未经测试):
exports.removeOldEvents = functions.https.onRequest((req, res) => {
const eventsRef = admin.database().ref('events')
eventsRef.once('value')
.then((snapshot) => {
const promises = [];
snapshot.forEach((child) => {
child.forEach((child) => {
if (1000*Number(child.val().endDate) <= new Date().getTime()) {
promises.push(child.ref.set(null));
}
});
});
return Promise.all(promises);
})
.then(results => {
const responseObj = {response: 'success'};
res.send(responseObj);
})
.catch(err => {
res.status(500).send(err);
})
});
推荐阅读
- python - Ipython 模块 memory_profiler 中的错误,%mprun
- flutter - 使用不包含 CLASS 类型的 Bloc 的上下文调用 BlocProvider.of()
- html - 更改列表中一个图像的图像大小
- node.js - 如果脚本停止,则永远重新启动(节点)
- c# - 在此之后如何获取每个字符:
- c# - GetHashCode() - 不可变的值?
- visual-studio - 在一个解决方案中构建和运行两个项目
- image-processing - 如何在这张图片中分离这两个边界?
- php - 在ajax中使用设置间隔时滚动到顶部
- node.js - 当我需要导入像 const promise = require ('promise') 这样的承诺以具有 .then 的属性时