首页 > 解决方案 > 为什么我们要完成 observable?

问题描述

我想知道在下面编写的代码中不编写完整语句的缺点。在这种情况下会发生什么?

Observable.create(function(observer) {
  observer.next('Hello');
  observer.next('World');
  // observer.complete(); 
});

标签: javascriptrxjs

解决方案


如果您不调用.complete(),订阅者将永远不会知道您Observable将不再发出事件。通过调用.complete(),所有订阅者将取消订阅并释放分配的内存,从而防止内存泄漏。您可以假设订阅者将自行取消订阅(基于事件内容、事件计数或其他任何内容),但强烈建议发出“已完成”事件,因为它可以防止您Observable被滥用。

同样如评论中所写,如果Observable未完成,某些运算符根本无法工作(例如concatMap,将等待 Observables 完成,然后再切换到下一个)


推荐阅读