как захватить введенный элемент.CloudFuntions.Firebase - PullRequest
0 голосов
/ 23 сентября 2018

Мне нужно захватить элемент, введенный в определенную базу данных, как я могу это сделать?Я пытался с snap.val(), но он не работает для меня, с snap.after.val(), но я не очень ясно о его использовании ....

exports.getDat = functions.database.ref('/a_principal').onWrite((snap, context) => {

    // snap.data.val(); fail-
    // snap.val(); fail-

    console.log(snap.before.val());
    console.log(snap.after.val());

});

с использованием snap.before.val() и snap.after.val() Я могу получить значение строки до и после события, но как мне захватить вставленные данные?то есть тот, который активирует событие, которое в этом случае будет последним, которое появляется в snap.after.val()

snap.before.val() return: { '01': 11, '02': 22, '03': 33 }

snap.after.val() return: { '01': 11, '02': 22, '03': 33, '04': 44 }

очевидно, что данные, которые активировали .onWrite, были { '04': 44 }.Это данные, которые я хочу создать, как я могу это сделать?

Спасибо за помощь.

PS: извините, если мой английский достаточно плох, я использую переводчик:(

1 Ответ

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

Облачные функции дают вам два снимка:

  1. данные, как они существовали до операции записи, которая запустила функцию
  2. данные, как есть, после операции записи, которая вызвалаfunction

Снимки не содержат явной информации о том, что изменилось.Но сравнивая старые данные и новые данные, вы сами можете определить это в коде.На самом деле это чистая операция JavaScript, не связанная с Firebase или облачными функциями.

Простой способ реализовать это:

var before = { '01': 11, '02': 22, '03': 33, '05': 0 };
var after =  { '01': 11, '02': 22, '03': 32, '04': 44 };

var added = {},
    removed = {},
    changed = {};
    
Object.keys(before).forEach(function(key) {
  if (!after[key]) {
    removed[key] = before[key];
  }
  else if (before[key] !== after[key]) {
    changed[key] = after[key];
  }
});
Object.keys(after).forEach(function(key) {
  if (!before[key]) added[key] = after[key];
});

console.log("added", added, "removed", removed, "changed", changed);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...