2017-03-04 11 views
0

firebaseデータベースでクエリを実行しようとしていますが、ユーザーがオフラインである場合は、再度試してみるようにユーザーにポップアップを表示します。ただし、オフラインのときにクエリは返されません。オフライン時にFirebaseデータベースクエリが返されない

databaseRef.queryEqual(toValue: "someValue").observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in 
    print(snapshot) //this is never called when user is offline 
}) { (error) in 
    print(error) //neither is this 
} 

このクエリを実行し、ユーザーがオフラインであったかどうかを検出する最適な方法は何ですか?

答えて

1

データベースクライアントは、バックエンドおよびに接続されていないため、キャッシュ内の場所を認識していないため、コールバックを呼び出すことができません。

.info/connectedを見ると、Firebaseクライアントがバックエンドに接続されているかどうかを検出できます。 Firebase documentation for an example of detecting connection stateを参照してください。

+0

ありがとうございました!最高の(最も安全な)アプローチとして何をお勧めしますか? 1)あなたの答えと同じように、firebaseクライアントが接続されていることを知らせ、接続されていない場合はクエリを許可しない、または2)クエリを実行してX秒以内にクエリが返ってこない場合は、 – Nilsymbol

+0

タイムベースのものが必要な場合を除き、決してタイムアウトを使用しないでください。ここではそうではありません。場所が全く新しくクライアントで作成されている場合は、その上で 'setValue(nil)'を呼び出すことによって場所をプライミングすることを検討してください。そうすれば、クライアントは価値がないことを知り、発砲するでしょう。私は最近、ここで非常によく似た質問に答える:http://stackoverflow.com/questions/42430992/firebase-ondatachange-not-called-when-offline/42431732#42431732 –

関連する問題