从 Angularfire2 上的 FirebaseListObservable 捕获错误

Catch errors from FirebaseListObservable on Angularfire2

我正在使用 Angularfire2Ionic2 并寻找一种方法来捕获 FirebaseListObservable subscribe() 函数上的错误。

我正在订阅 fbData,这是一个 FirebaseListObservable,当我将 browser/device 切换为离线时,(错误)函数从未被调用。我不明白为什么。

我的 objective 是在用户离线或无法访问 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 静默等待套接字连接建立。只有在安全规则拒绝对查询的读取访问权限时,订阅才会出错。

如果您想实施这样的超时方案,则必须手动执行所有操作:包括在开始查询时启动超时,并在查询 returns 及时得到结果时取消超时。