0

我一直在爲此奮鬥很長一段時間,我真的不知道爲什麼會發生這種情況。使用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

回答

1

你的聽衆應該使用once(),而不是在()進行連接。 on()讓聽衆連接。

+0

我的問題是,我試圖將第一個「開」改爲「一次」,它沒有奏效,所以我改回來了,並沒有試圖將它們都改爲一次。謝謝 – user2396640

相關問題