Функции Firebase getChild value - PullRequest
       2

Функции Firebase getChild value

0 голосов
/ 25 апреля 2019

У меня проблема с функциями Firebase. То, что я пытаюсь сделать, это когда дочерний элемент Items обновляется, тогда я хочу получить значение Count и выполнить дальнейшие вычисления, но я сталкиваюсь с тем, что консоль журнала firebase всегда показывает ошибку «TypeError: Невозможно прочитать свойство 'val' неопределенного ".

структура JSON

"VTEST" : {
    "A" : {
      "Count" : 5,
      "Items" : {
        "item1" : "apple"
      },
      "NUMBER" : 5
    },
    "B" : {
      "Count" : 8,
      "Items" : {
        "item1" : "orange;"
      },
      "NUMBER" : 3
    },
    "C" : {
      "Count" : 10,
      "Items" : {
        "item1" : "grape"
      },
      "NUMBER" : 7
    },
    "D" : {
      "Count" : 12,
      "Items" : {
        "item1" : "grava"
      },
      "NUMBER" : 10
    },
    "E" : {
      "Count" : 15,
      "Items" : {
        "item1" : "fish"
      },
      "NUMBER" : 12
    },
    "F" : {
      "Count" : 18,
      "Items" : {
        "item1" : "chicken;"
      },
      "NUMBER" : 8
    }
  }

Мой код:

exports.ItemCount = functions.database.ref('/VTEST/{ID}/Items').onUpdate((updateRef, context) => {
        var childCount = updateRef.after.numChildren();
        var newReference = updateRef.after.ref.parent.child('/Count');
        var Count = newReference.val();
        Count = Count + childCount;
        return updateRef.ref.update({Count})
    })

То, что я ожидаю, это то, что значение Count будет обновлено, но оно всегда выдает ошибку: «TypeError: Невозможно прочитать свойство val из undefined» Может кто-нибудь сказать мне, что я здесь делаю неправильно, я не понимаю.

1 Ответ

1 голос
/ 25 апреля 2019

Проблема заключается в том, что Reference не имеет val() метода.Вам нужно использовать метод once(), чтобы получить значение соответствующего расположения базы данных.

Должен работать следующий адаптированный код:

exports.ItemCount = functions.database
  .ref('/VTEST/{ID}/Items')
  .onUpdate((updateRef, context) => {
    var childCount = updateRef.after.numChildren();
    var newReference = updateRef.after.ref.parent.child('/Count');
    return newReference.once('value').then(dataSnapshot => {
      var Count = dataSnapshot.val();
      Count = Count + childCount;
      return newReference.parent.update({ Count: Count });
    });
  });

Однако, в зависимости от ваших точных требований, вы можете решить использовать транзакцию, см. https://firebase.google.com/docs/database/web/read-and-write#save_data_as_transactions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...