在我们的应用程序中,有很多地方我们使用:
someObservable.take(1).subscribe(onSuccessHandler, onFailureHandler);
但是对于订阅服务,您需要考虑在某个时候取消订阅,而这并不总是那么简单。
我想将其简化并重写为:
someObservable.toPromise().then(onSuccessHandler).catch(onFailureHandler);
但是,看到toPromise()
的实现方式(这里),我不明白为什么它不关心取消订阅。
代码中的注释说无法进行取消操作,但如果我们真的像这样泄漏内存,该怎么办呢?
编辑
我想出了一个让我担忧的例子:
Observable.timer(10, 10).toPromise().then((v) => console.log("I'm done"));
如果我获取的可观察对象永远不会完成,那么不仅我的承诺永远不会以值完成,而且我也无法取消订阅这些可观察对象(例如超时它们和我的承诺),因为我没有订阅对象的访问权限。这样会导致内存泄漏!