【问题标题】:Firebase functions v 1.0: Alternative of DeltaSnapshot.changed() after v 1.0Firebase 函数 v 1.0:在 v 1.0 之后替代 DeltaSnapshot.changed()
【发布时间】:2018-11-04 12:31:11
【问题描述】:
在 1.0 版之前,我使用DeltaSnapshot.changed() 来检查我的数据库函数,如果数据在传入数据下发生更改。
但现在升级到 v 1.0 后,该方法不再可用。
有没有其他方法可以复制此功能?
一种方法是使用before 和after 以及我需要检查更改的节点下的循环子项。
有没有更好的方法来执行这个操作?
【问题讨论】:
标签:
firebase
firebase-realtime-database
google-cloud-functions
【解决方案1】:
您确实必须自己比较之前和之后的数据,看看发生了什么变化。
if (change.after.val().valToCompare !== change.before.val().valToCompare) {
<< your code here >>
}
【解决方案2】:
没有更好的方法。 before 和 after 字段是您在写入或更新事件期间发生更改的唯一指示。
【解决方案3】:
正如其他答案中提到的,我们需要创建自己的方法以具有更改检查的功能。所以这里有一个助手,用于在事件数据中给定的相对路径(不是从根 / 的绝对路径)进行对象比较。
'use strict';
let _ = require('lodash');
/**
*
* @param data Change<DataSnapshot> object received in the event.
* @param path Relative path in the data object received in the function.
* @returns {boolean} return true if there is a change in data of before and
* after snapshot , false if the values are identical
*/
function isChanged(data, path) {
let before = data.before.child(path);
let after = data.after.child(path);
if (before.exists() && !after.exists() ||
!before.exists() && after.exists()) {
return true;
}
else {
return !_.isEqual(before.val(), after.val());
}
}
module.exports = {
isChanged
};