0

저는 오랫동안이 문제에 시달렸는 데 왜 이런 일이 발생하는지 전혀 알지 못합니다.Firebase 클라우드 기능을 사용하여 알림을 보내는 중 루프가 발생했습니다.

Cloud 기능을 사용하여 상태 변경 알림을 전송합니다. 내가 대시 보드를 사용하여 상태를 변경하는 기능을 배포 한 후

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

제 문제는 처음 "on"을 "once"로 변경하려고 시도 했으므로 작동하지 않아 다시 변경했기 때문에 두 번 모두 변경하려고하지 않았습니다. 고맙습니다 – user2396640

관련 문제