Как добраться до определенного узла в Google Cloud Function из функции `onWrite`, вызванной событием другого узла? - PullRequest
0 голосов
/ 01 мая 2018

При создании нового узла я хочу создать и перенести эти же данные в другой узел.

Узел Door / 111111111111 / ins - это узел, в который я помещаю новые данные:

root: { 
  doors: {
    111111111111: {
       MACaddress: "111111111111",
       inRoom: "-LBMH_8KHf_N9CvLqhzU",
       ins: {
          // I am creating several "key: pair"s here, something like:
          1525104151100: true,
          1525104151183: true,
       }
    }
  },
  rooms: {
    -LBMH_8KHf_N9CvLqhzU: {
      ins: {
        // I want the function to clone the same data here:
        1525104151100: true,
        1525104151183: true,
      }
    }
  }

Это моя функция, которая выдает ошибку:

TypeError: change.before.ref.parent.child (...). Val не является функцией

Код:

exports.updateRoom = functions.database.ref('/doors/{MACaddress}/ins').onWrite((change, context) => {
    const beforeData = change.before.val(); // data before the write
    console.log(beforeData); // all good so far
    const afterData = change.after.val(); // data after the write
    console.log(afterData); // all good so far

    const roomPushKey = change.before.ref.parent.child('/inRoom').val(); // ERROR
    console.log(roomPushKey);

    return change.after.ref.parent.parent.parent.child('/rooms').child(roomPushKey).child('/ins').set(afterData);
});

Что не так с моим путем? Как я могу получить его для обновления другого узла?

1 Ответ

0 голосов
/ 01 мая 2018

child () - это метод Reference , который возвращает другой объект Reference. Ссылка не имеет метода val (), потому что она не содержит никаких данных. Это просто ссылка.

Чтобы получить данные вне местоположения триггера базы данных, вам необходимо запросить их у базы данных реального времени. Для этого используйте метод Once () . Это очень распространенное явление, и вы сможете использовать образцы и документацию, чтобы выяснить, что вам нужно делать.

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