首页 > 解决方案 > Firebase 实时数据库中的云函数

问题描述

我有一个这样的数据库结构:

root: {
       timer: 1,
       data: {
                id1: val,
                id2: val,
       },
       cronology: {
                id:{
                       id1: val,
                       id2: val,
                },
                id:{
                       id1: val,
                       id2: val,
                }
         }

我正在尝试创建一个触发器,当修改计时器值时,它会向 cronology 添加一个包含路径实际值的子项:'/data'。所以我在 DatabaseReference '/timer' 上使用 onUpdate 方法创建了一个函数。问题是我不知道如何访问此函数中的“/数据”值

export const cronologyBuilder = functions.database.ref("/timer")
.onUpdate((change, context) => {
    const newdata = admin.database.ref('/data');

    return admin.database.ref('/cronology').set(newdata);
});

我尝试使用此代码,但它告诉我 newdata 对象不适用于 set 方法。如何获取“/data”路径的值?

标签: javascriptfirebase-realtime-databasegoogle-cloud-functionsfirebase-admin

解决方案


您的代码实际上并未查询任何数据。这行代码只是构建了一个Reference对象。它不包含任何数据:

const newdata = admin.database.ref('/data');

如果要查询该位置,则需要对其调用once()并使用返回的 Promise 来等待该位置的数据:

return admin.database.ref('/data').once('value')
.then(snapshot => {
    return admin.database.ref('/cronology').set(snapshot.val());
})

我建议阅读Admin SDK 数据库 API的文档以了解如何读取和写入数据。您还需要了解 Promise 是如何工作的,以便正确处理它们。


推荐阅读