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
})
}
我已经设置了 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
})
}