18

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?

Adi B
  • 819
  • 1
  • 8
  • 11

2 Answers2

25
.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
Abhishek Jain
  • 3,562
  • 2
  • 26
  • 44
Ankit Kumar
  • 3,663
  • 2
  • 26
  • 38
4

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.

ESala
  • 6,878
  • 4
  • 34
  • 55