火基云功能Typescript从火基实时数据库获取价值更新时

时间:2018-08-17 14:38:41

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

  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
       });
    

enter image description here

更新: enter image description here

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

1 个答案:

答案 0 :(得分:3)

从实时数据库触发Cloud Function时,您将在触发点获得数据快照。由于您是在/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
    }
});