10

假设我有一个observableA从网络获取数据并将其发出的数据,如果我每次尝试从网络请求数据时都订阅这个 observable,那么它会很重。

我想创建 BehaviorSubject 并将其连接到 observableA,以便任何其他线程/对象都将订阅 BehaviorSubject 以获得最新发出的数据。

到目前为止,我无法管理它来编码。我无法创建空的 BehaviorSubject 并在 observableA 中调用,因为它们彼此不相关。我无法订阅 observableA 并获得 BehaviorSubject 作为观察者,知道如何完成它吗?或者甚至更好?

4

3 回答 3

4

您可以使用multicast. 例如,

Observable<String> o = ...;
ConnectableObservable<String> co = o.multicast(BehaviorSubject.<String> create());
co.connect();
co.subscribe(...);
co.subscribe(...);
co.subscribe(...);
于 2014-06-06T06:09:31.400 回答
1

我在 javascript 中有类似的场景,我在 Rx 中包装了 Promise,当我订阅 observable 时我不想再次进行网络调用。这就是我最终实施的方式:

   subject = new Rx.AsyncSubject();
   observable = Rx.Observable.fromPromise(....).subscribe(subject);

您现在可以将 promise 响应作为 subject.subscribe(...) 使用,并且它始终会从 subject 发出 promise 结果,因为我们正在使用 AsyncSubject (AsyncSubject - 表示异步操作的结果。OnCompleted 通知之前的最后一个值,或通过 OnError 收到的错误会发送给所有订阅的观察者)。

于 2015-08-27T18:43:50.577 回答
0

在 Rx.NET 中,我们将使用接受参数的Publish重载之一。initialValue从本质上讲,它只是一种更短的方式来进行像 zsxwing 描述的多播。我不确定 Rx.Java 是否提供这些重载Publish方法。

于 2014-08-28T14:19:26.183 回答