2017-09-01 113 views
0

使用Firebase API從數據庫中讀取數據會讓我在Web用戶界面加載後1-2秒內突然發生一些尷尬事情。有沒有人有任何替代閱讀數據?我試過REST API,但是我仍然需要使用Firebase authlistener,它在我能夠檢索用戶ID並使用REST API之前再次給了我一個延遲。不管我讀的數據有多小。檢索數據時的Firebase延遲

我會很感激任何超過加載屏幕!下面

+0

你好,你能否詳細說一點?我在某些項目中使用了Firebase,因此我可能可以幫助您,但我不明白您的要求與網絡相關,或者與您實施Firebase訂閱的方式有關。 – adz5A

+0

我在尋找的是從firebase數據庫中讀取數據的更快方式。如果我現在加載我的頁面,當前登錄用戶的用戶信息在加載頁面後1-2秒內出現。 – kensil

回答

0

是一個簡單的例子來獲取你不必等待這一承諾得到解決,打開申購的火力

const app = firebase.initializeApp() 
const db = app.database(); 
let unsub; 

const user = new Promise((resolve, reject) => { 

    unsub = app.onAuthStateChanged(
     status => { 

      if (status === null) { 

       resolve(app.signInWithEmailAndPassword()); 

      } else resolve(user); 

     }, 
     err => reject(err); 
    ) 


}); 


user.then(unsub, unsub); 

db.ref("path/to/data").on("child_added",() => {}); 

// this promise will fail if the user is not 
// auth 
const data = db.ref("path/to/data").once("value"); 

用戶狀態。然而,取決於您的應用程序的設置,如果您未通過身份驗證,則無法讀取數據庫。

所以一個解決方案可以非常直接。

隨着重構的一點點,我們有:

const getData =() => db.ref("path/to/data").once("value"); 

user.then(getData).then(data => { /* data here */ }); 

這最後承諾將有效地只要用戶身份驗證解決一次當且僅當一切正常。您可以在對用戶進行身份驗證之前打開訂閱,但不能保證更快。打敗它的唯一方法是簡單地刪除首先訪問數據庫所需的閱讀權限...