React Native 中的 Firebase 事务

Firebase transaction in React Native

我已经设置了 Firebase,一切正常。现在我想在有人按下名字时增加一个值,一开始我想“让我们更新它”。但很快我发现这不是正确的方法。我正在创建一个非常简单的多人游戏,所以其他人有可能同时按下这个名字。这样会出问题。

我查了一下,发现 Firebase 事务是正确的方法,我查了一些教程,得出了以下代码:

   const renderList = ({ item }) => {
        return (
            <ListItem
                style={{
                    marginTop: 10,
                    width: 380,
                }}
                roundAvatar
                title={playerList[item].username}
                subtitle={item.subtitle}
                onPress={() => {
                    logIn(roomId, playerList[item].username)
                }}
            />
        )
    };


  const increasePress = () => {
            const myRef = firebase.database().ref('MP/rooms/testroom/participants/Max/')
            await firebase.firestore().runTransaction((transaction) => {
                const snapshot = await transaction.get(myRef);

                return snapshot.update(myRef,'press',snapshot.data().press + 1)
            });
        }


    useEffect(() => {
        ownParticipantRoom.update({
            username: username,
            host: isHost,
            press: 9,
            connected: 1,
        })
    }, [gamePercentage])

我知道这不起作用的第一个原因是因为我在异步函数之外使用 Await。但是我从来没有用过这个。我该如何解决?

我已使用以下代码修复它:

    const increasePress = () => {
        const myRef = firebase.database().ref('MP/rooms/testroom/participants/Max/').child('press');
        myRef.transaction(function (currentPress) {
            return currentPress + 1
        })
    }