2017-05-05 71 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'來替換字符串中的變量 –

相關問題