我想在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。
如何更新上面的代码以返回单个值,它似乎返回一个数组?
由于
答案 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(...)
}