我一直在寻找一个简单的方法来避免因为未取消订阅而导致的内存泄漏问题,因为我已经阅读过相关文章。大多数情况下,我只需要从后端接收一次响应。然后我会想要取消订阅。那么为什么不在回调函数中调用它呢?
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,没有其他东西。
它可以编译并且运行时没有错误。 我不熟悉调试器,无法确定可观察对象是否实际上被销毁并随后被垃圾回收。
我错过了什么吗? 有人更熟悉调试器可以纠正我吗? 因为如果这有效,我将在所有地方都这样做。 除了我的pollWords()函数...
这似乎比我看到的其他解决方案简单得多。 我认为我甚至不需要闭包,因为当我在调试器中查看它时,我看到"_this"是"this"的闭包,而"this"实际上是可观察的。 所以,如果有某种方式可以防止发生对"this"的篡改,那么我可以调用"this.unsubscribe()"并完成。 并不是一个可怕的对象引用闭包...
参考资料: