2017-09-01 79 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 */ }); 

这最后承诺将有效地只要用户身份验证解决一次当且仅当一切正常。您可以在对用户进行身份验证之前打开订阅,但不能保证更快。打败它的唯一方法是简单地删除首先访问数据库所需的阅读权限...