Как изменить значения внутри новых триггеров Firebase onUpdate или onWrite? - PullRequest
0 голосов
/ 06 сентября 2018

До версии (<= v0.9.1) можно было установить такие данные, а теперь уже нет ... </p>

event.data.ref.child('thisname').set("error");

edit: сеттер здесь не упоминается! Только как получить значения из onUpdate или onWrite https://firebase.google.com/docs/functions/beta-v1-diff

Решение размещено ниже

1 Ответ

0 голосов
/ 06 сентября 2018

Firebase : (поддерживает версию 1.0 или 2.0)

Если у кого-то еще есть проблемы изменение / настройка / обновление значений в его облачных функциях внутри триггера onUpdate или onWrite, тогда это может помочь вам ...

Сначала вот как мое дерево данных выглядит так:

"users" : {
    "4h23u45h23509hu346034h5943h5" : {
      "address" : "Backouse 2",
      "city" : "Los Angeles",
      "name" : "Joseph",
       ...
    },
    "23u4g24hg234h2ui342b34hi243n" : {
      "address" : "Streetouse 13",
      "city" : "Los Angeles",
      "name" : "Stefan",
      ...

Теперь в облаке функционирует:

До (<= v0.9.1) </strong>

exports.updatingUser = functions.database.ref('/users/{pushId}')
.onUpdate(event => {
  var address = event.data.child('address');
  var city = event.data.child('city');

  if (address.changed() || city.changed()) {
      //generateThisname()
      if (thisname == null) {
        event.data.ref.child('name').set("error");     //Important Part
      }
      else {
        event.data.ref.child('name').set(thisname);    //Important Part
      }
      ...

Сейчас (>= v1.0.0)

exports.updatingUser = functions.database.ref('/users/{pushId}')
.onUpdate((change, context) => {
  var addressBefore = change.before.child('address').val();
  var addressAfter = change.after.child('address').val();

  var cityBefore = change.before.child('city').val();
  var cityAfter = change.after.child('city').val();

  //create reference from root to users/{pushId}/
  var rootSnapshot = change.after.ref.parent.child(context.params.pushId)


      if ((addressBefore !== addressAfter) || (cityBefore !== cityAfter)) {
          //generateThisname()
          if (thisname === null) {
              rootSnapshot.child('name').set("error");
          }
          else {   
              rootSnapshot.child('name').set(thisname);
          }
          ...

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

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