2017-05-05 67 views
0

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

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

是你的参考路径是否正确? –

+0

是的,路径是正确的,我验证了。我有另一个功能,正确写入该路径 –

+0

我的意思是用户名被替换为单引号?我怀疑 –

回答

1

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

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

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

尝试参考路径

`tokens/${username}/fcmToken` 

代码:

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

} 
+0

谢谢,但我不确定这是否是问题,如果我按照您的建议添加$,那么该函数将与以下错误错误:Firebase.child失败:第一个参数是一个无效的路径:“标记/ $ {用户名}/fcmToken”。路径必须为非空字符串,并且不能包含“。”,“#”,“$”,“[”或“]” at Error(native) –

+0

您是否使用了反引号或引号?尝试在控制台中打印路径。您必须使用'backtick'来替换字符串中的变量 –

相关问题