【问题标题】:(New Firebase Unity SDK) Calling GetValueAsync on a Query wont fire its ContinueWith the first time its called(新 Firebase Unity SDK)在第一次调用时调用 GetValueAsync 不会触发其 ContinueWith
【发布时间】:2017-04-02 10:11:50
【问题描述】:

我正在使用新的 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 函数并按预期工作。

我在这里做错了什么?

【问题讨论】:

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


【解决方案1】:

Firebaser 在这里...

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

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


我没有看到你所看到的。我会仔细检查您是否正在处理在您的回调中说 Result 可能为空或为空的情况。 我们的支持人员擅长与您一起解决问题。

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());
      }
    }
  });

【讨论】:

  • 感谢您的帮助。我确实有很多数据要获取。好吧,“很多”在高分下大约有 5000-10000 个条目。在已经收集了大部分条目之前,我忘记为 total_score 添加规则索引,并且我不确定在 indexon 方面规则是否具有追溯力?也许这就是它表现得很奇怪的原因。但是,您上面建议的代码在我的情况下不会做太多,因为它甚至从未进入 lambda 函数。所以里面的东西都不重要。
  • 我知道您是否不能提供确切的日期或其他任何信息,但只能提供下一个 beta 版本对公众开放的时间? =)
  • 下一个测试版大约需要几周时间,可能是新年前的最后一次更新。让我看看我能做什么。我会在这里回复。
  • 所以我今天做了类似的事情,但这次我使用 FirebaseDatabase.DefaultInstance.GetReference("a child away").SetRawJsonValueAsync("some pretty long string").ContinueWith( ) 就像我之前的情况一样,它永远不会进入 ContinueWith。数据在我的firebase项目中正确存储并且没有错误,但它不会给我一个非常烦人的回调。
  • 使用“Firebase SDK 6.0.0”的统一代码仍然存在同样的问题@Grodslukarn 你解决了这个问题吗?你能和我们分享一下最后的结果吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 2022-09-25
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
相关资源
最近更新 更多