Subject类的isStopped属性和closed属性有什么区别?

24

Subject有两个属性closedisStopped。我知道closed可以用来检查是否仍然可以订阅Subject,但是isStopped应该用于什么呢?

我问这个问题是因为我正在尝试找到一种方法,以便在BehaviorSubject的下一个操作完成时知道。我可以使用isStopped吗,还是它被用于其他用途?


你可以检查源代码 https://github.com/ReactiveX/rxjs/blob/master/src/internal/Subject.ts - Igor
我已经这样做了。我可以看到isStopped与closed一起被设置为true,但是相对于closed,isStopped的独特目的是什么? - Maurice
2
“unsubscribe” 会将两个参数都设置为 true,但是在 errorcomplete 的情况下,“isStopped” 也会被设置为 true。如果调用一个,“throw” 异常另一个则不会有异常抛出。这两者之间存在差异。检查哪一个取决于你停止使用 Subject 实例时要调用什么。 - Igor
1个回答

40

比较 closedisStopped 的行为,可以从每个操作后的结果值方面看到:

  • 发生错误时:
    • closed: false
    • isStopped: true
  • 如果Subject完成:
    • closed: false
    • isStopped: true
  • 如果取消订阅:
    • closed: true
    • isStopped: true

这只是非详尽的公共场景。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接