Атомарное обновление 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 });
            });
        });
  };

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
216
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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);

        });
};

Подумайте о принимая этот ответ, если он отвечает на ваш вопрос, чтобы другие знали, что он решен.

Rosário Pereira Fernandes 27.07.2018 22:51

Я просто принял это - спасибо за урок, ха-ха ... Я не знал, как это сделать.

hugger 27.07.2018 23:18

Привет, Розарио, а что, если бы мне пришлось перебирать несколько ссылок? В моем случае это обзоры (как мы уже решили) и вклады с точно такой же структурой JSON.

hugger 28.07.2018 21:07

Другие вопросы по теме