【问题标题】:How to add child to a List in Firebase Realtime Database with a cloud function?如何使用云功能将子项添加到 Firebase 实时数据库中的列表?
【发布时间】:2018-12-06 03:05:26
【问题描述】:

我尝试创建一个 Firebase 云函数,它对实时数据库中的新“事件”做出反应,并在相应用户的通知列表中添加一个“通知”对象。我成功获取了新的事件信息,向相应的用户推送通知,但不是列表格式(而是哈希图格式)。

所以我尝试获取孩子的数量,以便推送具有良好索引的新通知。在那种情况下,我不知道如何管理承诺。

想法是从新事件中获取运动名称和级别,在运动中获取对应的用户并为每个用户添加通知。

  • 还有我的云功能:

    export.detectEvent = 函数.数据库 .ref("事件​​/{eventID}") .onCreate((快照,上下文)=> { 常量事件 = 快照.val(); 常量运动 = event.sport.name; 常量级别 = event.niveau; 常量名称 = 事件名称; var 承诺=[]; var path =“运动/”+运动+“/”+级别; 变量通知 = { 类型:“事件”, contentID : context.params.eventID, 消息:sport +“:Un nouvel événement vous!”, 见过:假的, 日期:“01” }; console.log('路径', 路径); return admin.database().ref(path).once("value", function(result) { var 数据 = 结果.val(); for(数据中的 var 属性){ if (datas.hasOwnProperty(property)) { promises.push(admin.database().ref("Users/"+datas[property]+"/notifications").on("value", function(snapshot) { console.log("有"+snapshot.numChildren()+"个通知"); admin.database().ref("Users/"+datas[property]+"/notifications").child(snapshot.numChildren()).set(notif) })); } } return Promise.all(promises); })

    });

  • 有表:

Table

【问题讨论】:

  • 您的函数中有两个返回语句。这不可能是你想要的——一个函数只能返回一个值。此外,您没有正确处理承诺。最后,你几乎不应该使用 on()。使用 once() 代替一次获取数据。
  • 感谢您的回答。你有想法怎么做吗?

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


【解决方案1】:

此代码有效,但它为通知创建了一个随机密钥。 如何将整数 (0,1,2,...) 作为键以便在我的数据库中有一个 list

<pre>
exports.detectEvent = functions.database
.ref("Event/{eventID}")
.onCreate((snapshot, context) => {
    const event = snapshot.val();
    const sport = event.sport.name;
    const level = event.niveau;
    const name = event.name;
    var promises=[];
    var path = "Sports/" + sport + "/" + level;
    var notif = {
        type : "Event",
        contentID : context.params.eventID,
        message : sport + " : Un nouvel événement vous correspond ! ",
        seen : false,
        date : "01"
    };
    console.log('path ', path);
    return admin.database().ref(path).once("value", function(result) {
        var datas = result.val();
        for (var property in datas)  {
            if (datas.hasOwnProperty(property)) {
                promises.push(admin.database().ref("Users/"+datas[property]+"/notifications").push(notif));
            }

        }
        return Promise.all(promises);
    })
});

<code>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多