使用AngularFire2处理Firebase权限错误

使用AngularFire2处理Firebase权限错误,angular,typescript,firebase,firebase-realtime-database,angularfire2,Angular,Typescript,Firebase,Firebase Realtime Database,Angularfire2,我在Firebase中有一个集合,可能偶尔会被没有正确权限的用户访问。现在,当这种情况发生时,我在控制台中收到一堆警告和未捕获的异常,似乎不可能正确处理它们。我通常同意这样一种可观察的观点: this.af.database.object('/someLocation/abc').subscribe(obj => { // logic }); 在不放松安全规则的情况下,处理这些未经处理的异常的最佳方法是什么?您可以将错误处理程序传递给您的subscribe调用: this.af.

我在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
  }
);
这将从控制台中删除未处理的错误/拒绝的承诺,但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");
  });

非常感谢。我不知道我怎么会错过这个错误。可能从这开始的时间太长了。