第一次后取消 observable - Angular2、TypeScript、rxjs/Observable

Cancel observable after first time - Angular2, TypeScript, rxjs/Observable

我正在应用程序启动时检查现有登录信息,我只需要一次。我们如何在第一次之后取消该订阅?我试过 take(1) 但这似乎不起作用。

this.auth.getUserData().take(1).subscribe(data => { // the take(1) doesn't work
  console.log('Firebase responded with success.');
  this.rootPage = TabsPage;
 }, err => {
  console.log('Firebase responded with error.', err);
  this.rootPage = LoginEmailPage;
 }
);

你试过用first()代替take(1)

根据您在模块级别的导入,您可能希望为 first 运算符添加一个导入

import 'rxjs/add/operator/first'

虽然这实际上并没有取消订阅,但它完成了观察,我认为这就是我的意思。

编辑:按照 OP

最初的要求添加取消订阅的明确方式

.subscribe(...) 的结果将 return 订阅的处理程序。您可以使用该句柄显式取消​​订阅,代码如下所示:

let subscription = this.auth.getUserData().take(1).subscribe(data => { // the take(1) doesn't work
  console.log('Firebase responded with success.');
  this.rootPage = TabsPage;
  subscription.unsubscribe();
 }, err => {
  console.log('Firebase responded with error.', err);
  this.rootPage = LoginEmailPage;
 }
);

虽然在这种情况下显式取消订阅感觉不对,但常见的模式是在 ngOnInit() 内或基于 post 初始化事件创建订阅,并在 ngOnDestroy().