【问题标题】:Firebase functions update trigger behavior for realtime databaseFirebase 函数更新实时数据库的触发行为
【发布时间】:2021-12-27 18:41:38
【问题描述】:

我的代码如下所示:

exports.XXX = functions.database.ref("/global/tokenEarned")
    .onUpdate(async (change, context) => {
            let newValue = change.after.val();
            const oldValue =   change.before.val()

            if(oldValue !== newValue){
                const diff = newValue - oldValue

                const resp = await db.ref("/global").once("value")
                const respData = resp.val()

                await db.ref("global").update({"totalDivi" : respData.totalDivi + divi})

            }

     return null
})

如您所见,每当另一个属性“tokenEarned”更新为新旧值之间的差异时,我都会更新属性“totalDivi”。

这按预期工作。但是,在多人更新 tokenEarned 值的情况下,这将如何工作? firebase 会将上述函数调用按顺序值被多个用户更新吗?

【问题讨论】:

    标签: firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    firebase 会将上述函数调用按照获取的顺序排列吗 由多个用户更新?

    不,不能保证执行将遵循任何顺序,例如触发事件的顺序。如果启动多个服务器实例,云功能甚至可以同时、并行执行。

    根据您的具体用例,您可能需要寻求其他解决方案。

    【讨论】:

    • 所以这里有一个要求:我们有一个在任何时间点由几个人玩的游戏。这些玩家中的每一个都在玩游戏时获得积分。所以,这成为他们个人的终生积分。现在,我们还希望将所有玩家获得的总积分作为一个数字进行跟踪。那么,这个全局点应该如何更新呢?使用目前的方法,我们有一个关于个人分数的更新触发器。当它更新时,我们只需获取生命周期分数的最新值并添加到它。根据您上面所说的,这不会起作用。
    猜你喜欢
    • 2021-09-27
    • 2020-08-24
    • 1970-01-01
    • 2023-03-11
    • 2019-12-19
    • 2022-07-08
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多