在第一次后取消可观察 - 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;
}
);
你试过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()
中的挂起订阅。
'first()'和'take(1)'是相同的行为 – paulpdaniels
然后我不明白OP在找什么。我将编辑我的答案,具体说明如何取消订阅。 –
答案是关于正确和相同的:http://stackoverflow.com/questions/34548924/missing-observable-methods-rxjs-5-0-0-beta-0?noredirect=1&lq=1随着最近的角度版本,必须指定rxjs导入。 – sathishvj
您能否提醒您“不工作”是什么意思?它实际上是否不止一次地调用您的订阅处理程序?为什么要取消订阅?观察结果完成还不够吗? –