Я хочу создать простое приложение для создания матчей, используя android и firebase.
Работа заключается в следующем
Пользователь A подключается к сети, а узел создается на базе Firebase.
Пользователь B подключается к сети, и второй узел создается на базе FireBase. и так далее.
Объектами UserA и UserB являются
Теперь я хочу обновить UserA с полями userB и userB с полями UserA.
Обеспечение того, чтобы ни один другой пользователь не прерывал это обновление. лайк
Я попытался использовать транзакцию и обнаружил, что с помощью транзакции можно изменить только одну ссылку на базу данных. Есть ли способ, с помощью которого я могу обновить обоих пользователей одновременно, используя транзакцию и гарантируя, что обе ссылки будут либо обновлены, либо сбой в одно и то же время (между ними нет. Один обновлен, а другой нет)
Облачная функция также может использоваться, но не знает, как использовать многопутевое обновление внутри транзакции для базы данных в реальном времени.
EDIT-1
Я перешел в Firebase Fire Store и пока попробовал приведенный ниже код с функциями Firebase. Не уверен, что он будет служить цели, когда база пользователей увеличивается.
function matchedUser(xSnapshot, mSnapshot) {
return db.runTransaction(t => {
console.log(mSnapshot.mUserId)
console.log(xSnapshot.mUserId)
console.log("Other Snap ID" + otherSnapshot.mUserId)
console.log("My Snap ID" + mySnapshot.mUserId)
const xUserRef = db.collection("Users").doc(otherSnapshot.mUserId)
return t.get(xUserRef).then(doc => {
t.update(xUserRef, otherSnapshot)
const mUserRef = db.collection("Users").doc(mySnapshot.mUserId)
t.update(mUserRef, mySnapshot)
}).catch(error => {
console.log(error)
})
})
.then(result => {
console.info('Transaction success!')
return "Success"
})
.catch(err => {
console.error('Transaction failure:', err)
return "Failed"
})
}