我正在尝试创建一个可以达到某个数字的ObservableTimer
。我已经有了这样做的逻辑,但是当我尝试取消订阅时,我收到了"Cannot read property 'unsubscribe' of undefined"
错误。
这是我的代码
syncExpireTime() {
let route = AppSettings.API_ENDPOINT + 'Account/ExpireTime'
this.http.get(route, this.options).map(this.extractData).catch(this.handleError).subscribe(
res => {this.expireTime = +res},
error => console.log(error),
() => this.timerSub = TimerObservable.create(0,1000)
.takeWhile(x => x <= this.expireTime)
.subscribe(x => x == this.expireTime ? this.logout() : console.log(x))
)
}
然后这是我的退出代码。我在注销
时试图取消订阅过期计时器logout() {
this.timerSub.unsubscribe()
this.router.navigate(['./login'])
}
答案 0 :(得分:11)
有两种方法可以尝试解决此问题。
logout() {
if(this.timerSub){// this if will detect undefined issue of timersub
this.timerSub.unsubscribe();
}
this.router.navigate(['./login'])
}
或者你可以尝试ngOnDestroy角度2的生命周期钩子,当我们想要破坏我们的组件时用来做事情
ngOnDestroy() {
if(this.timerSub){
this.timerSub.unsubscribe();
}
this.router.navigate(['./login']);
}
我希望这会有所帮助:)
答案 1 :(得分:3)
我遇到了同样的例外。在调用unsubscribe()之前,最好检查&#34; subscription.closed == false&#34;。
ngOnDestroy(){
java.lang.NoSuchMethodException: setMobileDataEnabled [boolean]
答案 2 :(得分:1)
您应该在unsubscribe
中致电ngOnDestroy
。
Lyfecicle Hooks
ngOnDestroy
在Angular破坏指令/组件之前进行清理。 取消订阅observable并分离事件处理程序以避免记忆 泄漏。
在Angular破坏指令/组件之前调用。