使用Firebase云功能发送通知时循环播放

时间:2017-09-24 18:19:33

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

我已经挣扎了很长时间,我真的不知道为什么会这样。

我使用云功能根据状态变化发送通知。这是我的代码:

exports.sample = functions.database.ref('users/{pushID}/status').onUpdate(Snap => {
    const key = Snap.params.pushID;

    var ref = admin.database().ref('users');
    return ref.child(`${key}`).on("value", function(snap) {

        const category = snap.child('category').val();
        console.log("category",category);

        var ref = admin.database().ref('/categories/')
                return ref.child(`${category}`).on("value", function(snapshot){

                    const tokenID = snapshot.child('tokenID').val();
                    const payload = {
                        data: {
                          title: 'HELLO',
                          text: `HOW ARE YOU ?`
                        }
                      };

                      return admin.messaging().sendToDevice(tokenID, payload);


    })

});

部署功能后,我使用仪表板更改状态。

当我这样做时,我收到通知! (我得到"发送"在日志上) 但是当我改变"状态"再次,我得到两个通知!现在我有两次"发送"在日志上等等。

这似乎是一个循环,但我不明白为什么, 无论我记录什么,我只得到一个值,我不会得到多个令牌或任何东西,它只是向同一个用户发送相同的通知。

每当我重新部署该功能时,"计数器"重置,然后第一个更改只发送一个通知。

我的数据库看起来像这样:

users
-->push id
---->status=""
---->category="test"

categories
-->test

1 个答案:

答案 0 :(得分:1)

您的听众应使用once()而非on()附加。 on()让听众附上。