为什么要完成observable?

Pra*_*rma 2 javascript rxjs

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

Observable.create(function(observer) {
  observer.next('Hello');
  observer.next('World');
  // observer.complete(); 
});
Run Code Online (Sandbox Code Playgroud)

Twi*_*her 5

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

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

  • 此外,如果您没有完成自己的 observables,您可能想知道为什么 concatMap 没有按预期工作 (2认同)