我需要捕获输入特定数据库的要素,我该怎么办?我曾尝试使用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()
返回:
{ '01': 11, '02': 22, '03': 33 }
snap.after.val()
返回:
{ '01': 11, '02': 22, '03': 33, '04': 44 }
很明显,激活.onWrite
的数据是{ '04': 44 }
。那就是我要创建的数据,我该怎么做?
感谢您的帮助。
PS:对不起,如果我的英语不够好,我会使用翻译器:(
答案 0 :(得分:2)
Cloud Functions为您提供了两个快照:
快照不包含有关已更改内容增量的明确信息。但是通过比较旧数据和新数据,您可以确定自己在代码中。这实际上是纯JavaScript操作,与Firebase或Cloud Functions不相关。
一种简单的实现方法:
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);