首次取消可观察 - Angular2,TypeScript,rxjs / Observable

时间:2016-07-24 19:34:04

标签: typescript observable rxjs5

我正在检查应用程序启动时的现有登录,我只需要一次。我们如何在第一次取消订阅后?我尝试了(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;
 }
);

1 个答案:

答案 0 :(得分:2)

您是否尝试过first()而不是take(1)

根据您在模块级别的导入,您可能需要为第一个运算符添加导入

import 'rxjs/add/operator/first'

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

编辑:添加OP最初请求的取消订阅的显式方式

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

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()内或基于发布后事件创建订阅,并取消ngOnDestroy()内的待处理订阅。 / p>