(Новый SDK Firebase Unity) Вызов GetValueAsync для запроса не приведет к срабатыванию ContinueWith при первом вызове

Я создаю рекорд в своей игре, используя новый SDK Firebase Unity, но столкнулся с некоторыми проблемами при попытке обновить свой список рекордов. Это код, который я запускаю, когда пытаюсь обновить свой список рекордов.

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. Однако во второй раз, когда я его вызываю, он войдет в лямбда-функцию и будет работать, как ожидалось.

Что я здесь делаю неправильно?


person Grodslukarn    schedule 18.11.2016    source источник
comment
Кросс-пост: groups.google.com/forum/#!topic/ firebase-talk/pkWLt_5piUI   -  person Frank van Puffelen    schedule 18.11.2016


Ответы (1)


Фаербейзер здесь...

Обновление: я вижу здесь проблему, которую мы исправим в нашей следующей бета-версии. Если у вас есть сложные запросы, не настроены никакие индексы и нет данных, возникает ошибка при обработке события (однако вы в конечном итоге получите одно событие, как только получите какие-либо данные).

Пока мы не исправим это, вы можете обойти проблему, добавив хотя бы некоторые данные по целевому пути или добавив индекс (https://firebase.google.com/docs/database/security/indexing-data). Я уверен, что первое работает, но не проверял второе обходное решение.


Я не вижу того, что вы видите. Я бы дважды проверил, что вы обрабатываете случаи, когда, скажем, результат может быть нулевым или пустым в вашем обратном вызове. Наши сотрудники службы поддержки умеют решать проблемы вместе с вами.

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());
      }
    }
  });
person Benjamin Wulfe    schedule 18.11.2016
comment
Спасибо за помощь. У меня есть много данных для извлечения. Ну, это около 5000-10000 записей под рекордом. Я забыл добавить индекс правила для total_score до тех пор, пока не будет собрано большинство записей, и я не уверен, что правила имеют обратную силу, когда дело доходит до индексона? Может быть, поэтому он ведет себя странно. Однако код, который вы предложили выше, мало что даст в моем случае, поскольку он даже не входит в лямбда-функцию. Так что то, что внутри, не имеет большого значения. - person Grodslukarn; 19.11.2016
comment
Я так понимаю, если вы не можете указать точную дату или что-то еще, кроме того, сколько времени осталось до того, как следующая бета-версия станет общедоступной? знак равно - person Grodslukarn; 19.11.2016
comment
следующая бета-версия ожидается через несколько недель и, вероятно, станет последним обновлением перед новым годом. Дай мне посмотреть, что я могу сделать. Я отвечу здесь. - person Benjamin Wulfe; 19.11.2016
comment
Хорошо, большое спасибо. О, и я также хотел сообщить вам, что он действительно работает отлично, как вы сказали, с другими менее сложными запросами/данными. - person Grodslukarn; 19.11.2016
comment
Итак, я сделал что-то подобное сегодня, но на этот раз я установил дочерний элемент в своей базе данных, используя FirebaseDatabase.DefaultInstance.GetReference(где-то дочерний элемент).SetRawJsonValueAsync(какая-то довольно длинная строка).ContinueWith() и, как и в моем предыдущем случае, он никогда не входит в ContinueWith . Данные хранятся правильно и без ошибок в моем проекте firebase, но это просто не дает мне обратного вызова, что очень раздражает. - person Grodslukarn; 22.11.2016
comment
Все та же проблема с моим кодом единства, который использует «Firebase SDK 6.0.0» @Grodslukarn, вы решили проблему? Не могли бы вы поделиться с нами последними результатами? - person Twinsens; 18.05.2019