2016-09-17 2 views
0

Когда мое приложение запускается, я делаю начальную выборку Firebase, чтобы вытащить все мои данные. Когда я позже добавляю данные в свою Firebase, я хочу, чтобы он получил новый ребенок, который был добавлен.Firebase: Get New Child Added

В настоящее время я выполняю это так. Есть ли лучший способ или встроенный способ сделать это в Firebase?

let initialFetch = false; 

ref.once('value', snap => { 
    // get all child data 
    initialFetch = true; 
}); 

ref.on('child_added', (snap) => { 
    if (!initialFetch) return; 
    // get new child data 
}); 

Любая помощь приветствуется. Заранее спасибо!

ответ

0
  1. Если вам нужны как новые данные, так и последующие данные, используйте child_added. Он будет немедленно срабатывать для всех существующих детей, а затем для любого добавленного ребенка.

  2. если вы хотите только новые данные, добавить метку времени своим детям и ref.orderByChild('timestamp').startAt(Date.now())

  3. Если вам нужны и новые данные и последующие данные, но хотят, чтобы лечить начальные дети по-разному: использовать child_addedиvalue как и сейчас.

Также смотрите: How to only get new data without existing data from a Firebase?

+0

Я хотел бы использовать вариант 1 ('child_added'), но мне нужно получить некоторые дополнительные метаданные из другого API, как только я вернусь мои исходные данные из Firebase. Поддерживает ли '.on()' обещание? – realph

+0

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