Unity Firebase 实时数据库返回“旧”数据

问题描述 投票:0回答:2

我正在使用适用于 Firebase 实时数据库的 Unity SDK。大多数时候它工作得很好。但是,有时它会返回旧数据以供查询。有时它只是上次更新之前的一次,有时,我什至不确定其之间有多少次更新。

您可以在下面看到我的数据库参考,记下

levelDepth, keyCount, keysAquiredLevels, gold, currentLevelCompleted
值。

下面是我使用 Unity 时获得的原始响应的图像

var response = await databaseReference.GetValueAsync();
您会注意到所有这些属性都与之前的更新不同。

这段代码在大多数情况下都有效,我真的需要锤击 10-20 次才能重现这个问题,但它确实发生了!我不知道为什么。

我已设置

FirebaseDatabase.DefaultInstance.SetPersistenceEnabled(false);
并尝试将
keepSync 
设置为 true 和 false,但问题仍然发生。

void Start()
{
    FirebaseDatabase.DefaultInstance.SetPersistenceEnabled(false);
    Firebase.AppOptions options = AppOptions.LoadFromJsonConfig(firebaseOptions.text);
    FirebaseApp.Create(options);
}

public static async Task<CurrentLevelConfig> GetCurrentLevelConfig()
{
    DatabaseReference databaseReference = FirebaseDatabase.DefaultInstance
                                                                    .RootReference
                                                                    .Child("users")
                                                                    .Child(FirebaseConfig.user.UserId)
                                                                    .Child("currentLevelConfig");

    var response = await databaseReference.GetValueAsync();
    if (response.Exists)
    {
        CurrentLevelConfig config = JsonConvert.DeserializeObject<CurrentLevelConfig>(response.GetRawJsonValue());
        Debug.Log("Got current level config!");
        return config;
    }

    return null;
}

任何想法将不胜感激。

firebase unity-game-engine firebase-realtime-database
2个回答
0
投票

尝试运行相同的查询,但不要等待结果,而是使用

ContinueWithOnMainThread
传递回调,如检索数据 - 读取数据一次

中所示

详细说明一下,您是否在正在生成的线程上运行此查询?这可能是一个竞争条件。


0
投票

@joe-spiro 关于添加 CheckAndFixDependencyAsync 的评论似乎解决了该问题! 我将继续测试,但现在我不再重现,将其标记为已回答。

© www.soinside.com 2019 - 2024. All rights reserved.