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