2017-03-04 60 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

谢谢Puf!你会推荐什么作为最好(最安全)的方法。 1)就像在你的回答中一样,如果连接不上,查询Firebase客户端是否连接并禁止查询,或者2)尝试查询,如果查询在X秒内未返回,那么认为它失败并删除观察者? – Nilsymbol

+0

除非我需要基于时间的事情,否则我绝对不会使用超时。情况并非如此。如果位置是全新的并且在客户端创建,请考虑通过调用'setValue(nil)'来启动位置。这样客户就知道没有价值并且会开火。我最近在这里回答了一个非常类似的问题:http://stackoverflow.com/questions/42430992/firebase-ondatachange-not-called-when-offline/42431732#42431732 –