javascript-如何在subscribe-tim获取观察者的“当前”值

我很难理解RxJ的特定部分:当您订阅Observable时,您仅订阅该Stream中的任何将来的事件。 与Promises相比,如果已解决了诺言,则无论何时致电<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.3.24/rx.all.js"></script>,您都将获得该值。

这是一个代码示例:

<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.3.24/rx.all.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.3.24/rx.all.js"></script>

我希望看到“订阅前”和“订阅后”都打印出来,尽管对我而言,“旧值”将被删除是有意义的。 但是似乎RxJ不能那样工作(仅打印“订阅后”)。 如何获得我想要的结果?

DallonF asked 2020-02-18T05:04:35Z
1个解决方案
82 votes

Rx提供两种行为(以及其他行为)。

可用的不同接收主题可以让您探索可观察对象的不同行为方式:

  • new Rx.AsyncSubject()是最基本的一劳永逸品种-如果事件发生时未订阅,则看不到它。

  • 使用new Rx.AsyncSubject()而不是Subject,您会得到想要的行为,因为BehaviorSubject表示“可以更改的值”

  • 使用new Rx.AsyncSubject(),您将获得5个最新值

  • 使用new Rx.AsyncSubject(),您将一无所获,直到可观察值完成为止,此时您将获得最终价值(如果再次订阅,将继续获得最终价值)。 这是Promises的真正Rx类似物,因为它在“解决”(即完成)之前不会产生任何结果,然后始终将值赋予订阅的任何人。

Brandon answered 2020-02-18T05:05:12Z
translate from https://stackoverflow.com:/questions/28311118/how-to-get-the-current-value-of-an-observer-at-subscribe-time