【问题标题】:Firebase transaction in React NativeReact Native 中的 Firebase 事务
【发布时间】:2020-04-02 14:00:53
【问题描述】:

我已经设置了 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。但是我从来没有使用过这个。我该如何解决?

【问题讨论】:

  • 我对 JS 很陌生,但你能尝试将 const increasePress = () =&gt; { 修改为 const increasePress = async () =&gt; { 吗?
  • 谢谢,按照你所说的,我不再收到错误消息了。但是,我发现了另一种可行的方法。我会把它作为答案发布。

标签: reactjs database firebase transactions native


【解决方案1】:

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

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

【讨论】:

  • 您能否编辑此答案以解释与原始代码的不同之处以及您认为这有帮助的原因?根据我们的经验,这种编写方法对未来的读者更有用,他们不会像你一样熟悉你的代码。我们还发现,更实质性的答案也更有可能获得支持。
猜你喜欢
  • 2019-12-28
  • 2018-06-15
  • 1970-01-01
  • 2018-05-16
  • 2018-06-29
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
相关资源
最近更新 更多