javascript - 带有子值的 Firebase 多路径原子更新?
问题描述
我成功地在他们的个人资料和他们使用此功能发布的所有评论上更新了我的用户的个人资料图片:
export const storeUserProfileImage = (url) => {
const { currentUser } = firebase.auth();
firebase.database().ref(`/users/${currentUser.uid}/profilePic`)
.update({ url });
firebase.database().ref('reviews')
.orderByChild('username')
.equalTo('User3')
.once('value', (snapshot) => {
snapshot.forEach((child) => {
child.ref.update({ profilePic: url });
});
});
};
我知道我应该使用原子更新来执行此操作,以便同时更新数据(以防用户离开应用程序或出现其他问题)。在查询子值时,我对如何实现这一点感到困惑。
任何帮助或指导将不胜感激!
解决方案
声明一个变量来存储所有更新。在您的听众循环中阅读更新时添加更新。循环完成后,运行原子更新。
export const storeUserProfileImage = (url) => {
const { currentUser } = firebase.auth();
firebase.database().ref('reviews')
.orderByChild('username')
.equalTo('User3')
.once('value', (snapshot) => {
var updates = {};
updates[`/users/${currentUser.uid}/profilePic`] = url;
snapshot.forEach((child) => {
updates[`/reviews/${child.key}/profilePic`] = url;
});
firebase.database().ref().update(updates);
});
};
推荐阅读
- javascript - for 循环内的 setState 无法正确更新状态
- javascript - 使用 if ... else 语句时如何处理重复代码?
- css - 是否可以在着陆图像上使用线性渐变进行反应?
- python - 如何在 Raspberry PI 4 上运行 selenium+chrome?
- python - 根据一个特定的索引值,python 和 pandas 过滤所有行
- python - 无法使用熊猫保存在“to_csv”中
- sas - SAS日期导入错误
- javascript - Javascript 中的方法 - 查找值中四分之一数量的代码
- python - 如何正确使用 iloc 索引?
- python - 如何在每个字符和下划线后添加空格?