2017-05-18 2 views
-1

ich eine ziemlich einfache Feuerbasis Funktion haben:event.params.wildcard den falschen Wert zurück

exports.sendFollowNotification = functions.database.ref('PendingRequest/{receiver_id}/{sender_id}').onWrite(requestEvent => { 
    const requestSnapShot = requestEvent.data; 
    const senderId = requestEvent.params.sender_id; 
    const targetId = requestEvent.params.receiver_id; 

    const target_token = requestSnapShot.child('sender').val(); 
    const sender_token = requestSnapShot.child('receiver').val(); 
    console.log('sender_id :'+senderId); 
    console.log('target_id :'+targetId); 
    console.log('target_token: '+ target_token); 
    console.log('sender_token: '+sender_token); 

    const pendingRequestPayload = { 
     data: { 
      token_sender : sender_token, 
      token_target : target_token, 
      request_sender : senderId, 
      request_receiver : targetId,     
      my_message_id: '0' 
     } 
    }; 

    if(target_token != null){ 

    // Send a message to devices subscribed to the provided topic. 
    return admin.messaging().sendToDevice(target_token, pendingRequestPayload) 
     .then(function (response) { 
      // See the MessagingTopicResponse reference documentation for the 
      // contents of response. 
      console.log("Successfully sent message:", response); 
     }) 
     .catch(function (error) { 
      console.log("Error sending message:", error); 
     }); 

    }  

Jedes Mal, wenn diese Funktion dort feuert zwei Werte, die getauscht wird: SenderID bekommt targetId Wert und umgekehrt. Beide Werte werden mit der params -Eigenschaft abgerufen, während den Werten, die ich von requestSnapShot.child ('value_name') erhalte, nichts Seltsames passiert.
Die dumme Lösung ist nur, um die beiden Werte zu tauschen, wann immer ich sie brauche, aber gut, das ist eine wirklich dumme Lösung. Was fehlt mir hier?

+0

Genau. Ich habe versehentlich die "dumme Problemumgehung" eingefügt ... ich meine, es funktioniert total die 2 Werte zu tauschen und ich könnte den Code auf dem Weg lassen, aber es macht keinen Sinn –

+0

Ich habe meine Antwort aktualisiert –

Antwort

0

Wenn „Ziel“ ist „Empfänger“, diese vertauscht sind:

const target_token = requestSnapShot.child('sender').val(); 
const sender_token = requestSnapShot.child('receiver').val(); 

Machst du das absichtlich, um das Problem zu arbeiten?

Update:

Es ist schwer zu erraten, warum dies nicht für Sie arbeitet. Ich kopierte Code, beseitigte Ihre Work-around und verkürzt es für die Prüfung:

exports.sendFollowNotification = functions.database.ref('PendingRequest/{receiver_id}/{sender_id}') 
     .onWrite(requestEvent => { 
    const requestSnapShot = requestEvent.data; 
    const senderId = requestEvent.params.sender_id; 
    const targetId = requestEvent.params.receiver_id; 

    const target_token = requestSnapShot.child('receiver').val(); 
    const sender_token = requestSnapShot.child('sender').val(); 
    console.log('sender_id :'+senderId); 
    console.log('target_id :'+targetId); 
    console.log('target_token: '+ target_token); 
    console.log('sender_token: '+sender_token); 
}); 

Ran mit diesen Daten:

{ 
    "PendingRequest" : { 
    "R1" : { 
     "S1" : { 
     "receiver" : "R-token", 
     "sender" : "S-token" 
     } 
    } 
    } 
} 

Und erhielt diese Protokollausgabe:

sender_token: S-token 
target_token: R-token 
target_id :R1 
sender_id :S1 
+0

Ich bin ehrlich gesagt wirklich verwirrter aswell, anstatt diese Werte zu tauschen, ich bin jetzt nur noch 2 childs unter sender_id hinzufügen, um senderId und receiverId zu speichern und dann nur em mit child(). val() und alles funktioniert gut. Aber ich schreibe/lese immer noch Daten in meine Datenbank –

Verwandte Themen