Firebase транзакция в React Native - PullRequest
0 голосов
/ 02 апреля 2020

Я настроил 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 вне функции asyn c. Однако я никогда не использовал это. Как я могу это исправить?

1 Ответ

0 голосов
/ 02 апреля 2020

Я исправил это, используя следующий код:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...