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

Я знаю, что для этого мне нужно использовать атомарное обновление, чтобы данные обновлялись одновременно (в случае, если пользователь покидает приложение или что-то не так). Я запутался в том, как я могу сделать это, опрашивая дочерние значения.

Любая помощь или руководство будет принята с благодарностью!

1 ответ

Решение

Объявите переменную для хранения всех обновлений. Добавляйте обновления по мере их чтения в цикле вашего слушателя. Когда цикл закончится, запустите атомарное обновление.

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

        });
};
Другие вопросы по тегам