【发布时间】:2019-04-12 11:29:23
【问题描述】:
我一直在寻找一种简单的方法来避免我所读到的由于取消订阅失败而导致的内存泄漏。大多数时候,我只想要后端的 ONE 响应。然后我想退订。那么为什么不在回调中调用呢?
onSubmit(){
var subscription = this.puzzleService.login(this.nameoremail, this.password).subscribe( success =>{
if(success){
this.router.navigate(['/puzzles']);
}
else{
this.message="Login failed. Please try again.";
}
this.loading=false;
subscription.unsubscribe();
});
this.loading=true;
}
注意将订阅分配给局部变量。然后这个局部变量被锁定在一个闭包中,并在其工作完成时被告知取消订阅。没有类变量,没有 takeUntil,没有别的。
它编译并运行没有错误。我对调试器不够熟悉,无法确定 observable 对象是否实际被销毁并随后被垃圾收集。
我有什么遗漏吗?更熟悉调试器的人可以纠正我吗?因为如果这行得通,我将在任何地方都这样做。除了在我的 pollWords() 函数中...
这似乎比我见过的其他解决方案要简单得多。我想我什至不需要闭包,因为当我在调试器中查看它时,我看到“_this”是“this”的闭包,而“this”实际上是可观察的。因此,如果有某种方法可以防止“this”发生的修改,那么我可以调用“this.unsubscribe()”并完成。并不是说对象引用闭包是一件可怕的事情......
参考资料:
【问题讨论】:
-
查看最近的 GitHub 问题:github.com/ReactiveX/rxjs/issues/4318