具有实时数据库触发器的 Firebase 云功能:如何更新源节点?

高俊

我正在尝试编写一个执行以下操作的云函数:

  1. 收听 'posts/{postid}/comments/{commentsid}/' 节点中的新创作。(这是通过前端代码的数据库推送完成的)。此节点将在“uid”子节点下具有评论者的 uid。
  2. 使用子节点中的uid,在'users/uid'节点中查找评论者的用户名、昵称和头像,并记录下来。
  3. 使用用户名、昵称和个人资料图片的相关子节点更新“posts/{postid}/comments/{commentsid}/”节点。

下面的代码工作正常,直到最后一部分尝试完成工作。3. 错误消息是“函数返回未定义,预期的承诺或值”。

我认为这是 Firebase 特有的语法问题。有人可以指出我用来完成任务的正确语法吗?

非常感谢!

 exports.commentsupdate = functions.database.ref('posts/{postid}/comments/{commentsid}/')
  .onCreate((snapshot,context) => {
     const uid=snapshot.val()['uid'];
     let username="";
     let nickname="";
     let profile_picture="";
     const ref1=database.ref('users/'+uid);
     ref1.once('value',function(ssnapshot){
        username=ssnapshot.val()['username'];
        nickname=ssnapshot.val()['nickname'];
        profile_picture=ssnapshot.val()['profile_picture'];
     }).then(()=>{
        return snapshot.ref.update({
           username:username,
           nickname:nickname,
           profile_picture:profile_picture
       })
    })
});
雷诺塔内克

需要返回Promises链中的第一个Promise ,即once()方法返回的Promise ,如下:

exports.commentsupdate = functions.database.ref('posts/{postid}/comments/{commentsid}/')
    .onCreate((snapshot, context) => {

        const uid = snapshot.val()['uid'];
        let username = "";
        let nickname = "";
        let profile_picture = "";

        const ref1 = database.ref('users/' + uid);

        return ref1.once('value')   // <--- Note the return here
            .then(snapshot => {
                username = snapshot.val()['username'];
                nickname = snapshot.val()['nickname'];
                profile_picture = snapshot.val()['profile_picture'];

                return snapshot.ref.update({
                    username: username,
                    nickname: nickname,
                    profile_picture: profile_picture
                })

            })

    });

我建议您观看 Firebase 视频系列中关于“JavaScript Promises”的 3 个视频:https ://firebase.google.com/docs/functions/video-series/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Firebase云功能数据库触发器有时无法正确运行

在Firebase实时数据库中创建相同的节点

Firebase实时数据库-更新现有值

实时数据库触发器和推送通知Firebase和iOS

不使用数据库触发器就无法使用Firebase云功能更新Firebase数据库

如何从Firebase的实时数据库中删除具有UID的用户?

使用触发器向Firebase实时数据库添加元素

如何使用带有实时数据库/分析触发器的Firebase Cloud功能调度程序?

如何从云功能将JSON推送到Firebase实时数据库?

如果不同的条件为真,Firebase如何中断具有不同状态/消息的实时数据库事务?

Firebase实时数据库和云功能-基于数据节点的增量计数器

Mojify应用Firebase Cloud Function实时数据库后如何触发通知

如何使用云功能在Firebase中获取实时数据库?

如何从云功能中引用Firebase的实时数据库?

如何在onCreate触发器上访问Firebase云功能数据库的值

在使用云功能时,如何使用Firebase Admin SDK更改Firebase实时数据库中的数据?

如何更新Firebase实时数据库中的现有值?

避免在特殊情况下通过实时数据库触发Firebase功能

如何更新Firebase实时数据库中的位置?

在实时数据库中存储 Firebase 云消息

Swift Firebase 更新旧数据 - 实时数据库触发器

如何在 Google Cloud 服务器中触发实时数据库字段(不在 Firebase 的功能中)

如何使用云功能将新数据推送到 firebase 实时数据库?

Firebase/Cloud 功能不会在实时数据库删除时触发事件

Firebase 实时数据库 - 数据库触发器结构最佳实践

如何安排云函数更新 Firebase 实时数据库中的每个用户?

Cloud Run 或 Kubernetes 上的 Firebase 实时数据库触发器,而不是 Cloud Functions

SwiftUI - 更新 Firebase 实时数据库上的数据

如何在 Firebase 云功能中收听实时数据库更改(如流)?