gpt4 book ai didi

java - RxJava 在多个订阅者之间共享一个 Observable 的发射

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:16:54 24 4
gpt4 key购买 nike

我有以下问题:

我有一个 observable 正在做一些工作,但其他 observable 需要该 observable 的输出才能工作。我曾尝试多次订阅同一个可观察对象,但在日志中我看到原始可观察对象已多次启动。

这就是我创建对象的可观察对象:

Observable.create((Observable.OnSubscribe<Api>) subscriber -> {
if (mApi == null) {
//do some work
}
subscriber.onNext(mApi);
subscriber.unsubscribe();
})

那是我需要对象的可观察对象

loadApi().flatMap(api -> api....()));

我在用

.subscribeOn(Schedulers.io()) observable.observeOn(AndroidSchedulers.mainThread())
.unsubscribeOn(Schedulers.io()

在所有可观察量上。

最佳答案

我不确定我是否正确理解了您的问题,但我认为您正在寻找一种方法来在多个订阅者之间共享可观察对象的发射。有几种方法可以做到这一点。首先,您可以使用 Connectable Observable像这样:

ConnectableObservable<Integer> obs = Observable.range(1,3).publish();
obs.subscribe(item -> System.out.println("Sub A: " + item));
obs.subscribe(item -> System.out.println("Sub B: " + item));
obs.connect(); //Now the source observable starts emitting items

输出:

Sub A: 1
Sub B: 1
Sub A: 2
Sub B: 2
Sub A: 3
Sub B: 3

或者,您可以使用 PublishSubject :

PublishSubject<Integer> subject = PublishSubject.create(); //Create a publish subject
subject.subscribe(item -> System.out.println("Sub A: " + item)); //Subscribe both subscribers on the publish subject
subject.subscribe(item -> System.out.println("Sub B: " + item));
Observable.range(1,3).subscribe(subject); //Subscribe the subject on the source observable

输出:

Sub A: 1
Sub B: 1
Sub A: 2
Sub B: 2
Sub A: 3
Sub B: 3

这两个示例都是单线程的,但您可以轻松添加 observeOn 或 subscirbeOn 调用以使其异步。

关于java - RxJava 在多个订阅者之间共享一个 Observable 的发射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36805226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com