【问题标题】:Fire base cloud function Typescript get value from fire base real time database On Updated火基云函数 Typescript 从火基实时数据库中获取值 更新
【发布时间】:2019-01-24 15:13:51
【问题描述】:
  1. 如何获取节点“名称”的更新值时 “PostApproved”更新为true?
  2. 我在这里阅读了 firebase 文档,它没有多大帮助。有人知道在哪里可以找到关于 Firebase 实时数据库的 Firebase 云函数 Typescript 的教程吗?

    export const onPostApprovedUpdate = functions.database.ref('/Qpon/{country}/{city}/{nodeID}/PostApproved').onUpdate((change, context) => {
    
        const getCountry = context.params.country
        const getCity = context.params.city
        const getNode = context.params.nodeID
    
        const y = change.after.val()
    
        if (y == "true") {
    
        }
    
        return null
       });
    

更新:

假设将companyName的值改为数据库的数据,但打印出companyName和companyKey的值为“XXX”

【问题讨论】:

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


    【解决方案1】:

    当您从实时数据库触发云函数时,您会在触发点获得数据快照。由于您在/Qpon/{country}/{city}/{nodeID}/PostApproved 上触发,因此您只能获得PostApproved 的值。

    要同时获取Name 属性的值,您有两种选择:

    1. 在单独的调用中从数据库加载其他数据。

    2. 在数据库中触发更高一级:/Qpon/{country}/{city}/{nodeID}

    在数据库中触发更高一级

    通过触发/Qpon/{country}/{city}/{nodeID},您可以直接在change 参数中获得所需的所有数据。一个问题是onUpdate 也会触发对其他属性的更改,因此您需要检查该属性是否实际更改:

    export const onPostApprovedUpdate = functions.database.ref('/Qpon/{country}/{city}/{nodeID}').onUpdate((change, context) => {
    
        const getCountry = context.params.country
        const getCity = context.params.city
        const getNode = context.params.nodeID
    
        const before = change.before.child("PostApproved").val()
        const y = change.after.child("PostApproved").val()
    
        if (before !== y && y == "true") {
            let name = change.after.child("Name").val();
            ...
        }
    
        return null
    });
    

    在单独的调用中从数据库中加载附加数据

    要在单独的调用中加载额外的数据,您可以从快照中获取ref.parent 并使用它来触发额外的加载。这当然需要额外的往返,但最终会下载更少的数据:

    export const onPostApprovedUpdate = functions.database.ref('/Qpon/{country}/{city}/{nodeID}/PostApproved').onUpdate((change, context) => {
    
        const getCountry = context.params.country
        const getCity = context.params.city
        const getNode = context.params.nodeID
    
        const y = change.after.val()
        if (y == "true") {
            const parentRef = change.after.ref.parent;
            return parentRef.child("Name").once("value").then((nameSnapshot) {
                let name = nameSnapshot.val();
                ...
    
            });
        }
        else {
            return null
        }
    });
    

    【讨论】:

    • companyNamecompanyKey 的值只会设置在回调函数的内部。任何需要这些值的代码也必须在回调中。
    猜你喜欢
    • 1970-01-01
    • 2018-10-31
    • 2017-12-14
    • 2016-09-17
    • 2016-09-14
    • 2020-07-13
    • 2019-02-08
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多