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