Val Okafor
Val Okafor

Reputation: 3437

Firebase Function Get Single Value From Database

I want to get a single value from Firebase Database within Firebase function. However, the Promise never returns and the chained method never executes. Here is the method that fetches a value from the database

function getFcmToken(username){
    return admin.database().ref('tokens/{username}/fcmToken').once('value').then(snap => {
        if(snap.exists()){
            const token = Object.keys(snap.val());
            console.log("FCM Token", token);
            return token;
        }
        return [];
    });
}

The above method was supposed to return a token, but I am not sure it is, so the method below does not get executed.

function sendNotification(keyword, username){
    return getFcmToken(username).then(token => {
        if(token.length > 0){
            //Notification Detail
            let payload = {
                data:{
                   keyword: keyword 
                }
            };
            return admin.messaging().sendToDevice(token, payload);
        }
    });
}

In the console log, all I see is Promise pending.

How can I update the code above to return a single value, it appears it is returning an array?

Thanks

Upvotes: 0

Views: 1414

Answers (1)

Priyesh Kumar
Priyesh Kumar

Reputation: 2857

Your database ref path is wrong. You might wanted to replace username in path, but single quoted won't do that.

Firebase is listening on tokens/{username}/fcmToken, which doesn't exists. Hence on value event will not be triggered and so downline callback will not be executed.

You can use Template literals for building dynamic strings.

Try ref path as

`tokens/${username}/fcmToken`

Code:

function getFcmToken(username){
    return admin.database().ref(`tokens/${username}/fcmToken`).once(...)     

}

Upvotes: 1

Related Questions