firebase onUpdate功能未触发

时间:2020-06-30 02:58:18

标签: javascript node.js firebase firebase-realtime-database google-cloud-functions

当数据结构中的计数变量更改时,我尝试触发.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});
});

data structure

2 个答案:

答案 0 :(得分:0)

正如Prashin Jeevaganth在评论中提到的那样,您应该调试代码。您将看到change.before.countchange.after.countundefined,这说明了为什么什么也没发生。

看看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 beforeafter均返回DataSnapshot。这意味着,如果要获取值,则必须使用'val()'。

由于上述代码示例中的if语句将始终为undefined===undefined,其解析为true,因此该函数将始终返回null

我没有游乐场来测试它,但是我尝试将if语句更改为:

if(change.before.val()== change.after.val())

可能还有更多的方法可以实现...希望对您有帮助!