使用 AngularFire2 处理 Firebase 权限错误

Handling Firebase permission errors with AngularFire2

我在 Firebase 中有一个集合,可能偶尔会被没有正确权限的用户访问。现在发生这种情况时,我在控制台中收到一堆警告和未捕获的异常,似乎无法正确处理它们。我通常订阅这样的可观察对象:

this.af.database.object('/someLocation/abc').subscribe(obj => {
    // logic
});

在不放松安全规则的情况下,处理这些未处理异常的最佳方法是什么?

您可以将错误处理程序传递给您的 subscribe 调用:

this.af.database.object('/someLocation/abc').subscribe(
  obj => {
    // logic
  },
  error => {
    // handle/report the error
  }
);

这应该会从控制台中删除未处理的 errors/rejected 承诺,但 Firebase 可能仍会在那里报告警告。

此外,您应该知道,当可观察对象出错时,所有订阅者都会自动取消订阅。因此,如果您遇到错误,就是这样;不会发出更多值。

如果您正在编写可观察链,则在 subscribe 中指定错误处理程序的替代方法是使用 catch 运算符:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/catch';

let abc$ = this.af.database
  .object('/someLocation/abc')
  .catch(error => {
    // handle the error
    // and return an appropriate observable if you have one
    // perhaps a default value or an empty observable, etc.
    // or rethrow the error
    // or return Observable.throw(new Error('Some error'))
    return Observable.of("some-default-value");
  });