2017-09-01 10 views
0

Firebase APIを使用してデータベースからデータを読み込むと、Web UIがロードされてから1-2秒後に突然、データを読み取るための代替手段はありますか?私はREST APIを試しましたが、Firebase authlistenerを使用する必要があります。これは、ユーザーIDを取得してREST APIを使用する前に、もう一度私に遅延を与えます。私が読んでいるデータがどれだけ小さいかは問題ではありません。データ取得時のFirebaseディレイ

ローディング画面上で何かをいただければ幸いです。

+0

こんにちは、少し詳しく説明できますか?私はいくつかのプロジェクトでfirebaseを使用していますので、あなたを助けることができるかもしれませんが、あなたが望むものがネットワークに関係しているのか、firebaseサブスクリプションの実装方法に関係しているのか分かりません。 – adz5A

+0

私が探しているのは、firebaseデータベースからデータを読み込むより速い方法です。私のページを今ロードすると、現在ログインしているユーザーのユーザー情報が、ページがロードされてから1-2秒後に表示されます。 – kensil

答えて

0

は、以下のあなたがこの約束は、サブスクリプションを開くために決済されるのを待つ必要はありませんfirebase

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 */ }); 

この最後の約束は効果的とすぐに、ユーザは、すべてがOKに行った場合に限り、一度認証されるように解決されます。ユーザーを認証する前にサブスクリプションを開くことはできますが、より速く進むことは必ずしも必要ではありません。それを打つための唯一の方法は、最初にdbにアクセスするために必要な読み取り権を削除することです。

関連する問題