(新的Firebase Unity SDK)在查询上调用GetValueAsync不会在第一次调用时触发其ContinueWith

我正在使用新的Firebase Unity SDK在我的游戏中建立一个高分,但是在尝试更新我的高分榜时我遇到了一些问题。 这是我尝试更新我的高分榜时运行的代码。

public void GetHighscore(Action callback) { highscoreRef.OrderByChild("total_score").LimitToLast(10).GetValueAsync().ContinueWith(task => { if (task.IsFaulted) { // Handle the error... Debug.Log(task.Exception.Message); } else if (task.IsCompleted) { callback(task.Result); } }); } 

第一次调用GetHighscore时,它永远不会进入ContinueWith中的lambda函数。 但是,第二次调用它时,它将进入lambda函数并按预期工作。

我在这做错了什么?

Firebaser在这里……

更新:我确实在这里看到了一个问题,我们将在下一个Beta版本中更正。 如果您有复杂的查询,没有设置任何索引并且没有数据,则处理事件时会出错(但是一旦获得任何数据,您最终会获得单个事件)。

在我们解决此问题之前,您可以通过在目标路径下至少包含一些数据或添加索引( https://firebase.google.com/docs/database/security/indexing-data )来解决此问题。 我确信前者有效,但尚未validation后者的解决方法。


我没有看到你所看到的。 我会仔细检查你是否正在处理在回调中结果可能为null或为空的情况。 我们的支持人员善于与您解决问题。

https://firebase.google.com/support/contact/troubleshooting/

 FirebaseDatabase.DefaultInstance.RootReference.OrderByChild("total_score").LimitToLast(10) .GetValueAsync().ContinueWith(x => { if (x.Result == null) { Debug.Log("null!"); } else if (!x.Result.HasChildren) { Debug.Log("no children!"); } else { foreach (var child in x.Result.Children) { Debug.Log(child.ToString()); } } });