在第一次后取消可观察 - Angular2,TypeScript,rxjs/Observable

问题描述:

我正在做一个现有的登录检查应用程序的开始,我只想要一次。我们如何在第一次后取消订阅?我试图采取(1),但似乎并不奏效。在第一次后取消可观察 - Angular2,TypeScript,rxjs/Observable

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

您能否提醒您“不工作”是什么意思?它实际上是否不止一次地调用您的订阅处理程序?为什么要取消订阅?观察结果完成还不够吗? –

你试过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()或基于创建订阅在post init事件上,并取消ngOnDestroy()中的挂起订阅。

+1

'first()'和'take(1)'是相同的行为 – paulpdaniels

+0

然后我不明白OP在找什么。我将编辑我的答案,具体说明如何取消订阅。 –

+2

答案是关于正确和相同的:http://*.com/questions/34548924/missing-observable-methods-rxjs-5-0-0-beta-0?noredirect=1&lq=1随着最近的角度版本,必须指定rxjs导入。 – sathishvj