我正在使用Angularfire2
和Ionic2
,并寻找一种方法来捕获FirebaseListObservable subscribe()
函数上的错误。
我订阅fbData
,这是一个FirebaseListObservable
,当我切换我的浏览器/设备脱机时,(错误)函数从未被调用。我不明白为什么。
我的目标是在用户离线或firebase不可达时从localStorage获取数据。
下面是我的简化代码:export class MyService {
fbData: FirebaseListObservable<any[]>;
constructor(private af: AngularFire) {
this.data = af.database.list('/data', { preserveSnapshot: true });
}
updateData() {
return new Promise<any[]>((resolve, reject) => {
this.fbData.subscribe(
(snapshots) => {
resolve(snapshot.val());
},
(error) => console.log('error: ', error) // NEVER CALLED
);
});
}
Firebase 不会在网络不可达时抛出错误。SDK静默地等待套接字连接建立。只有当安全规则拒绝对查询的读访问时,订阅才会出错。
如果你想实现这样一个超时方案,你必须手动做所有的事情:包括当你开始一个查询时开始一个超时,当查询及时返回一个结果时取消它。