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

问题描述:

我一直在为此奋斗很长一段时间,我真的不知道为什么会发生这种情况。使用Firebase云端功能发送通知时循环

我正在使用云功能发送状态更改通知库。这是我的代码:

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 
+0

您的代码很难阅读,因为它没有缩进。 –

+0

@DougStevenson和现在? – user2396640

你的听众应该使用once(),而不是在()进行连接。 on()让听众连接。

+0

我的问题是,我试图将第一个“开”改为“一次”,它没有奏效,所以我改回来了,并没有试图将它们都改为一次。谢谢 – user2396640