Firebase功能从数据库中获取单个值

时间:2017-05-05 18:17:18

标签: firebase firebase-realtime-database google-cloud-functions

我想在Firebase功能中从Firebase数据库中获取单个值。但是,Promise永远不会返回,并且链式方法永远不会执行。以下是从数据库中提取值的方法

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 [];
    });
}

上面的方法应该返回一个令牌,但我不确定是这样,所以下面的方法不会被执行。

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);
        }
    });
}

在控制台日志中,我看到的只是Promise pending。

如何更新上面的代码以返回单个值,它似乎返回一个数组?

由于

1 个答案:

答案 0 :(得分:1)

您的数据库引用路径错误。您可能想要替换路径中的用户名,但单引号不会这样做。

Firebase正在侦听tokens/{username}/fcmToken,但这不存在。因此,on value事件不会被触发,因此不会执行下线回调。

您可以使用Template literals构建动态字符串。

尝试使用ref path作为

`tokens/${username}/fcmToken`

代码:

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

}