如何了解Firebase云功能中的新数据?
您如何知道数据是否未发生变化以及Firebase Cloud功能的新变化?我已经尝试了几个不同的选项来标记如果数据刚刚更改,那么我不发送推送通知。此外,我试图从快照_newData和_data子节点获取比较数字,如果__newData更大,那么这是一个新记录,但它不起作用。请告诉我怎么做。
一段示例代码。
module.exports = functions.database.ref('/userListEvents/{userID}')
.onWrite(event => {
const snapshot = event.data;
if (event.data.val() && !event.data.previous.val()) {
console.log('send push notification');
} else if (snapshot._data) {
console.log('send push notification');
} else {
return console.log('data was removed');
};
}
参考
functions.database.ref('/cards/{cardID}/interestedUsers')
.onWrite(event => {
更新:此选项对我不起作用,因为如果我执行例如functions.database.ref ('/ userListEvents / {userID} / {eventID}')
,则报告错误该字段不能为空。
我尝试过但是没有得到好结果。
if (event.data.val() && !event.data.previous.val()) {
console.log('send push notification');
} else if (event.data.val() && event.data.previous.val()) {
const newData = event.data.val();
const previousData = event.data.previous.val();
console.log('newData', newData, 'previousData', previousData);
const newDataKeys = Object.keys(newData);
const previousDataKeys = Object.keys(previousData);
if (newDataKeys.length > previousDataKeys.length) {
console.log('send push', newDataKeys.length, previousDataKeys.length);
} else {
return console.log('just update data', newDataKeys.length, previousDataKeys.length);
}
} else {
return console.log('removed data')
}
回答如下:
你需要比较使用event.data.current.val()
而不是event.data.val()
。例:
exports.detectChange = functions.database.ref('/userListEvents/{userID}')
.onWrite(event => {
const crnt = event.data.current;
const prev = event.data.previous;
if (crnt.val() && !prev.val()) {
// value created
console.log('Created: send push notification');
} else if (!crnt.val() && prev.val()) {
// value removed
console.log('Removed: send push notification');
} else {
// value updated
console.log('Updated');
}
});