Reputation: 536
Why merge
operator doesn't stopped after obs2
onCompleted? I am looking at diagram from this book
"Reactive Programming on Android with RxJava"
From my point of view if any of merged Observables is onCompleted
, then another Observable also terminates (completed).
But its not. why so?
Here is my code. Obs1 should terminate just after Obs2, but it is endless
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.btn);
Observable.merge(obs1, obs2)
.subscribe(data -> Log.d(TAG, String.valueOf(data)));
}
Observable<String> obs1 = Observable.interval(1, TimeUnit.SECONDS)
.map(data -> "obs1: " + data);
Observable obs2 =
Observable.just(1, 2, 3, 4, 5)
.delay(1, TimeUnit.SECONDS)
.filter(data -> data < 5)
.map(data -> "obs2: " + data)
.doOnComplete(() -> Log.d(TAG, "done"));
D/MainActivity: obs1: 0
obs2: 1
obs2: 2
obs2: 3
D/MainActivity: obs2: 4
done
D/MainActivity: obs1: 1
D/MainActivity: obs1: 2
D/MainActivity: obs1: 3
D/MainActivity: obs1: 4
D/MainActivity: obs1: 5
D/MainActivity: obs1: 6
Upvotes: 0
Views: 603
Reputation: 667
It's normal behaviour because first observable still emitting items on every second. Merge operator's onComplete method does not trigger until observed items onComplete method called
Upvotes: 1