Как добавить значение каждого элемента в списке базы данных Firebase? - PullRequest
0 голосов
/ 09 декабря 2018

Я работаю над гибридным приложением, использующим ионные и угловые данные, храня данные в базе данных firebase с помощью angularfire2

enter image description here

выше - изображениесписок в базе данных, теперь я хочу добавить totalCalories каждого узла в списке

, это мой код

 let count = 0;
 uList : Observable<any[]>;
 this.uList = this.dbServ.getConsumedFoodList(this.authServ.getUID()).snapshotChanges();
 this.uList.forEach(item => {
 item.forEach(itemData => {
      this.food = itemData.payload.val();
      console.log(this.food.totalCalories);
      count = count + this.food.totalCalories;
    })
  })

, но ничего не учитывается,это дает только 0.

1 Ответ

0 голосов
/ 12 декабря 2018

Вы настраиваете uList как наблюдаемое, а затем никогда не подписываетесь на него.Прочтите наблюдаемые и подписки , и вы поймете, почему ваш код не работает.По сути, вы говорите: « Это данные, которые я хочу прослушать », но на самом деле вы никогда не начнете слушать.

Если вам не нужно постоянно обновлять информацию на клиенте,Я бы порекомендовал вам пропустить использование .snapshotChanges() ... использование этого ( и подписка на него ) является излишним, если вы действительно не хотите обновлений в реальном времени .... Вместо этого для простоты я бы порекомендовалвы извлекаете данные, используя .value('once') что-то вроде:

let count = 0;
let uList = [];
let uid = this.authServ.getUID();

this.(AngularFireDatabaseVariable).database.ref(uid).once('value').then(dataReturnedAsObject => {
    uList = dataReturnedAsObject.val();

    uList.forEach(eachItem => {
        console.log(eachItem.totalCalories);
        count += eachItem.totalCalories;
    });

}).catch(err => {
    console.log('Error getting data from database');
    console.log(err);
});

* непроверенный код

...