Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase部署-统计数据库中的项目并分配_Javascript_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Javascript Firebase部署-统计数据库中的项目并分配

Javascript Firebase部署-统计数据库中的项目并分配,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我正在制作一个iOS应用程序,现在我遇到了这个问题 我想计算数据库中未读邮件的数量,并将其分配到不同的数据库闭包中。如下图所示 exports.arrivalNotifications = functions.database.ref('/trips/{tripId}') .onCreate((snap, context) => { const data = snap.val(); const uid = data.uid; va

我正在制作一个iOS应用程序,现在我遇到了这个问题

我想计算数据库中未读邮件的数量,并将其分配到不同的数据库闭包中。如下图所示

exports.arrivalNotifications = functions.database.ref('/trips/{tripId}')
    .onCreate((snap, context) => {

        const data = snap.val();
        const uid = data.uid;

        var counter = 0

        admin.database().ref('/messages/').on('value', function(snapshot) {
            snapshot.forEach(function(childSnapshot) {
                var childData = childSnapshot.val();
                if (childData.read === false) {
                    counter += 1
                }
            });
        })

        return admin.database().ref('/users/' + uid).once('value', snapshot => {

            const data = snapshot.val();
            const username = data.username

            var payload = {
                notification: {
                    title: username ' has ' + counter + " unread message.",
                    body: 'Press for more'
                }
            }

            admin.messaging().sendToDevice(toUser.fcmToken, payload)
                .then(function(response) {
                    console.log("Successfully sent message:", response);
                    return null;
                })
                .catch(function(error) {
                    console.log("Error sending message:", error);
                });

            })

        })

所以我想在有效载荷中使用计数器,但我找不到方法。我不熟悉JavaScript,因此如果有人能帮助我,我将不胜感激。

我将编写您的云函数,如下所示。请注意,我无法测试它,它可能需要一些微调/调试。。。特别是因为它意味着要把几个承诺连在一起

exports.arrivalNotifications = functions.database.ref('/trips/{tripId}').onCreate((snap, context) => {

    const data = snap.val();
    const uid = data.uid;

    let counter = 0;

    return admin.database().ref('/messages/').once('value')
        .then(snapshot => {
            snapshot.forEach(function (childSnapshot) {
                const childData = childSnapshot.val();
                if (childData.read === false) {
                    counter += 1;
                }
            });
            return admin.database().ref('/users/' + uid).once('value');
        })
        .then(snapshot => {
            const data = snapshot.val();
            const username = data.username;

            const payload = {
                notification: {
                    title: username + ' has ' + counter + ' unread message.',
                    body: 'Press for more'
                }
            };

            return admin.messaging().sendToDevice(toUser.fcmToken, payload);
        })
        .then(response => {
            console.log("Successfully sent message:", response);
            return null;
        })
        .catch(error => {
            console.log("Error sending message:", error);
        });

});

如果您是JavaScript新手,那么Firebase的云函数并不是学习它的最佳方式。我建议您先阅读和/或参加考试。它们涵盖了许多基本的JavaScript、Web和Firebase交互。您还可以在local Node.js进程中使用Admin SDK,该进程可以使用本地调试器进行调试。在这些之后,你也可以更好地为云函数编写代码。你说得对。但是在一些帮助下,我能够做我想做的事情。无论如何,谢谢你的建议!