1

У меня есть запрос, который нужно сделать за один раз, и не хочу, чтобы он слушал, чтобы данные обновлялись при отправке ручного триггера.Firebase возвращает старый набор данных при использовании с addListenerForSingleValueEvent()

Так что мой запрос выглядит следующим образом:

var ref = this.instance.child('/user/manish/today/events') 
    .orderByChild('endDateTime') 
    .endAt(endEventTime) 
    .limitToLast(10) 
    .addListenerForSingleValueEvent(this.previousEventListeners); 


    this.previousEventListeners = new com.google.firebase.database.ValueEventListener({ 
     onDataChange: (snapshot) => { 
     console.log("Value from native firebase access"); 
     console.dump(this.testing(snapshot.getValue())); 
     let result = { 
      value : this.testing(snapshot.getValue()), 
      type : "ValueChanged" 
     }; 
     console.dump(result); 
     }, 
     onCancelled: (databaseError) => { 
     console.log(databaseError.getMessage()); 
     hideActivtiyIndicator(); 
     } 
    }); 

Она возвращает один и тот же набор данных, даже если новая запись добавляется, что соответствует критериям запроса.

Спасибо

+0

Скорее всего, вы используете дисковое упорство. Постоянство диска Firebase и 'addListenerForSingleValueEvent()' не смешиваются хорошо. См. Http://stackoverflow.com/questions/34486417/firebase-offline-capabilities-and-addlistenerforsinglevalueevent/34487195#34487195 –

ответ

4

Да, мы испытали это поведение в наших собственных приложениях. Если вам требуются обновленные данные с включенной жесткостью диска, вам необходимо подписаться на все обновления значений событий, а не просто называть одно значение. Это особенно сбивает с толку, потому что, несмотря на это поведение, Firebase по-прежнему будет называть сервер для нового значения - он просто не вернет THAT one для вас!

Я подал запрос на поддержку с Firebase об этом, и они сказали, что это ожидаемое поведение. Я также предложил уточнить документацию, и они заявили, что они Thanks for this comprehensive feedback. We do value this kind of inputs from the developers. This will be included in our feature request list and will be discussed with our engineers. Unfortunately, I can't share any timeline or definite details as this will be monitored internally.

Надеюсь, это прояснит ситуацию. Для чего это стоит, мы обратились к этому с помощью категории FIRDatabaseReference (iOS, используйте соответствующую метафору для вашей платформы), которая добавляет дополнительную функцию. Он вызывает SingleValueEvent, а затем снова называет его 500 мс, возвращая значение оба раза вызывающему абоненту. (Обратный вызов берется со слабой ссылкой, если вызывающий абонент уходит в то же время.) 500 мс кажется подходящим - пользователю дается немедленная ценность для отображения, а если они находятся в автономном режиме или сеть работает медленно, это все, что они видят. Но если они подключены к сети и имеют приличный доступ к сети, это дает им последние данные очень скоро.