当前位置: 首页 > 知识库问答 >
问题:

如何用云功能在Firebase实时数据库中添加child到列表中?

子车轶
2023-03-14

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

所以我试着得到孩子的数量,以便用好的索引推送新的通知。在那种情况下,我不知道如何管理promise。

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").on("value", function(snapshot) {
                    console.log("There are "+snapshot.numChildren()+" notifs");
                    admin.database().ref("Users/"+datas[property]+"/notifications").child(snapshot.numChildren()).set(notif)
                  }));

共有1个答案

纪枫
2023-03-14

这段代码可以工作,但它为通知创建了一个随机键。如何将整数(0,1,2,...)作为关键字,以便在我的数据库中有一个列表?

<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>
 类似资料: