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

时间:2016-11-18 14:08:28

标签: c# unity3d firebase firebase-realtime-database

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

public void GetHighscore(Action<DataSnapshot> 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函数并按预期工作。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

这里的Firebaser ......

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

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

我没看到你所看到的。我会仔细检查你是否正在处理在回调中结果可能为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());
      }
    }
  });