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