Как добавить дочерний элемент в список в базе данных Firebase Realtime с помощью облачной функции? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать облачную функцию Firebase, которая реагирует на новое «Событие» в базе данных реального времени, и добавить объект «уведомления» в список уведомлений для соответствующих пользователей.мне удается получить новую информацию о событии, отправить уведомление соответствующим пользователям, но не в формате списка (но в формате hashmap).

Поэтому я попытался получить число детей, чтобы отправить новое уведомление схороший показательЯ не знаю, как управлять обещаниями в этом случае.

Идея состоит в том, чтобы получить sport_name и уровень из нового события, чтобы получить соответствующих пользователей в Sport и добавить уведомление для каждого пользователя.

  • Есть моя облачная функция:

    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)
                      }));</p>
    
    <code>        }
    
        }
        return Promise.all(promises);
    })
    </code>

    });

  • Есть таблица:

Таблица

1 Ответ

0 голосов
/ 05 декабря 2018

Этот код работает, но он создает случайный ключ для уведомлений.Как поставить целое число (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>
...