完成Observable.create()时是否需要(或推荐)observer.complete()?

时间:2019-02-08 18:21:45

标签: angular rxjs observable

在调用Observable.create时,在运行所有observer.next()调用之后,是否建议调用observer.complete()?同样,如果不这样做,是否会自动调用此方法?完整方法之后的代码也可以运行吗?

我注意到了另一个与此类似的问题,但是答案不足以使我确定。 What does observer.complete() do?

这是一个简单的例子,

return Observer.create(observer => {
  observer.next(1);
  observer.next(2);
  observer.complete();

  console.log("some more code");
});

1 个答案:

答案 0 :(得分:2)

  

在调用Observable.create时,建议在运行所有observer.next()调用之后,再调用observer.complete()

只能用“取决于”来回答。 ,如果您知道不会再有任何通知,那么最好将这种情况通知您的订户。如果您最喜欢的YouTuber在没有通知您的情况下停止播放视频,您就不会喜欢它。

但是,complete不仅仅是一种信息。它有效地关闭了您的可观察对象,从而禁止您发送更多常规通知。如果不确定将来是否会发送通知,请不要致电complete。接到电话后,tehre就再也不会回来。

  

类似地,如果我们不这样做,是否会自动调用此方法?

不。如果您从不致电complete,您将获得一个长寿的Observable。

  

完整方法之后的代码也可以运行吗?

是的,但是如上所述,您不能再向订阅者发送任何通知。

在这一点上,我可能应该让您知道of the Observable Contract。在我看来,这是一个艰难的阅读(很多陌生的术语),但是需要充分理解ReactiveX。