当数据结构中的计数变量更改时,我尝试触发.onUpdate函数。尽管计数变量更改仍未触发功能。 我的count变量位于主要的实时数据库下方。
const functions = require('firebase-functions');
// The Firebase Admin SDK to access Cloud Firestore.
const admin = require('firebase-admin');
admin.initializeApp();
exports.cleanStorage=functions.database
.ref('/count')
.onUpdate((change,context)=>{
if(change.before.count===change.after.count){
return null;
}
const newCount=change.after.count-7;
return change.after.ref.update({count:newCount});
});
答案 0 :(得分:0)
正如Prashin Jeevaganth在评论中提到的那样,您应该调试代码。您将看到change.before.count
和change.after.count
是undefined
,这说明了为什么什么也没发生。
看看doc:您需要使用val()
方法,如下所示:
exports.cleanStorage = functions.database
.ref('/count')
.onUpdate((change, context) => {
if (change.before.val() === change.after.val()) {
return null;
}
const newCount = change.after.val() - 7;
return change.after.ref.parent.update({ count: newCount });
});
重要提示:请注意,使用此代码,您可能会进入无限循环,因为您将更新节点,这将触发云功能。您可以更新另一个节点,例如:
return change.after.ref.child('newCount').update({ count: newCount });
答案 1 :(得分:0)
根据the reference before
和after
均返回DataSnapshot
。这意味着,如果要获取值,则必须使用'val()'。
由于上述代码示例中的if
语句将始终为undefined===undefined
,其解析为true
,因此该函数将始终返回null
。
我没有游乐场来测试它,但是我尝试将if
语句更改为:
if(change.before.val()== change.after.val())
可能还有更多的方法可以实现...希望对您有帮助!