我有一个Flowable
,它会连续发射物品,并且从不调用onError
或onComplete
。现在,我有一个Completable
,我想与此Flowable
合并,以便在Completable
完成Flowable
调用onComplete
时。我无法直接更改提供给我的Flowable
对象。
我遇到的一个问题是我会在takeUntil
上使用Flowable
,但是Flowable
可能会在任何时候停止发射物品,我仍然希望{{1} },以便可以调用Completable
。
更新:
由于我们可以做onComplete
,所以我们可以合并两个Completable.toFlowable()
。问题是,当一个完成时,我仍然找不到找到完成这两个方法的方法。
答案 0 :(得分:2)
正如您所指出的,您无法更改原始Flowable
本身,因此不会发出onComplete
。但是,您可以通过执行以下操作(伪代码)来使结果Flowable
发出它:
val f: Flowable = ...
val c: Completable = ...
val r: Flowable = f.materialize().mergeWith(c.materialize()).dematerialize()
答案 1 :(得分:0)
这是一个广义的解决方案。正如@Maxim的回答所述,merge
/ mergeWith
无法完成我的功能,因为它需要同时完成Flowable
和Completable
。该解决方案还可以正确处理这两种情况。
Flowable<Integer> f = Flowable.fromArray(1, 2, 3);
Completable c = Completable.complete();
final PublishSubject<Integer> subject = PublishSubject.create();
final CompositeDisposable cd = new CompositeDisposable();
Flowable result = subject
.doOnSubscribe(__ -> {
cd.add(f.subscribe(subject::onNext));
cd.add(c.subscribe(subject::onComplete));
})
.doOnDispose(cd::dispose)
.toFlowable(BackpressureStrategy.LATEST);