在Firebase Android中使用事务进行原子更新

时间:2018-09-09 09:33:20

标签: javascript android firebase firebase-realtime-database google-cloud-functions

我想使用android和firebase创建一个简单的配对应用程序。 工作如下 UserA联机,并且在Firebase上创建了一个节点。 UserB联机,并且在firebase上创建了第二个节点。等等。 UserA和UserB对象为enter image description here

现在,我要使用userB字段更新UserA,并使用UserA字段更新userB。 确保没有其他用户可以在此更新之间中断。喜欢 enter image description here

我尝试使用事务,发现使用事务只能更改单个数据库引用。有什么方法可以使用事务同时更新两个用户并确保两个引用都同时更新或失败。(两者之间没有。像一个更新,另一个则没有)

还可以使用云功能,但不知道如何在实时数据库的事务中使用多路径更新。

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

0 个答案:

没有答案