首页 > 解决方案 > 带有子值的 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 });
            });
        });
  };

我知道我应该使用原子更新来执行此操作,以便同时更新数据(以防用户离开应用程序或出现其他问题)。在查询子值时,我对如何实现这一点感到困惑。

任何帮助或指导将不胜感激!

标签: javascriptreactjsfirebasefirebase-realtime-databasemultipath

解决方案


声明一个变量来存储所有更新。在您的听众循环中阅读更新时添加更新。循环完成后,运行原子更新。

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);

        });
};

推荐阅读