Adi B
Adi B

Reputation: 888

Chain Completable into Observable flow

Suppose you want to insert a Completable in your Observable chain, such as for each emitted element, there is a completable that runs and blocks until it completes, what option would you choose? (here the Completable.complete() is just to make an example)

  1. .flatMap { Completable.complete().andThen(Observable.just(it)) }

  2. .doOnNext { Completable.complete().blockingAwait() }

  3. something else?

Upvotes: 18

Views: 13331

Answers (2)

Ankit Kumar
Ankit Kumar

Reputation: 3723

.flatMapCompletable { Completable.complete().andThen(Observable.just(it)) } // If you don't want it to return
.flatMap { Completable.complete().andThen(Observable.just(it)) } //Can be used if you want it to return Observable

Upvotes: 26

ESala
ESala

Reputation: 7058

In option 2. you lose the capability of cancelling the completable because blockingAwait() is not managed by the observable flow.

If you don't need to return the emitted element, there is also flatMapCompletable.

If you need to execute the completable but also return the emitted element, then I would go with option 1.

Upvotes: 4

Related Questions