Firebase 实时数据库更新值两次

firebase realtime database updating value twice

提问人:zeifi 提问时间:7/19/2021 更新时间:8/15/2022 访问量:263

问:

我正在尝试在 flutter 的实时数据库中设置一个布尔值,但它更改了两次该值。首先,它将值从 true 设置为 false,然后立即再次将其更改为 true。

Future<void> changeTurnkey1(String roomCode, String key1) async {
var codeRef = _codeRef(roomCode);
await codeRef.child(playersKey).child(key1).get().then((value) async {
final Map snapshotMap = value.value;
bool val = snapshotMap[canPlay];
if (val) {
  await codeRef.child(playersKey).child(key1).update({
    canPlay: false,
  });
} else {
  codeRef.child(playersKey).child(key1).update({
    canPlay: true,
  });
}
});
}
firebase flutter firebase-realtime-database

评论

0赞 Frank van Puffelen 7/19/2021
“首先,它将值从 true 设置为 false,然后立即再次将其更改为 true。”我不确定我是否了解您的应用程序中发生的情况。你能编辑你的问题来描述(或者更好的是:展示)你是如何观察到这一点的吗?

答:

0赞 Porter 7/19/2021 #1

似乎您同时使用两者并且......这肯定会产生不良影响。async/await.then()

尝试像这样使用:async/await

Future<void> changeTurnkey1(String roomCode, String key1) async {
var codeRef = _codeRef(roomCode);
var value = await codeRef.child(playersKey).child(key1).get()
final Map snapshotMap = value.value;
bool val = snapshotMap[canPlay];
if (val) {
  await codeRef.child(playersKey).child(key1).update({
    canPlay: false,
  });
} else {
  codeRef.child(playersKey).child(key1).update({
    canPlay: true,
  });
}
}
0赞 Peter Lai 8/15/2022 #2

我有同样的问题。 最后发现我们的旧服务器程序(nodejs docker)忘了停止。