Search code examples
javarx-javareactive-programmingflatmap

In RxJava, how to pass a variable along when chaining observables?


I am chaining async operations using RxJava, and I'd like to pass some variable downstream:

Observable
   .from(modifications)
   .flatmap( (data1) -> { return op1(data1); })
   ...
   .flatmap( (data2) -> { 
       // How to access data1 here ?
       return op2(data2);
   })

It seems like a common pattern but I couldn't find information about it.


Solution

  • The advice I got from the Couchbase forum is to use nested observables:

    Observable
        .from(modifications)
        .flatmap( (data1) -> { 
            return op1(data1)
                ...
                .flatmap( (data2) -> { 
                    // I can access data1 here
                    return op2(data2);
                })
            });
    

    EDIT: I'll mark this as the accepted answer as it seems to be the most recommended. If your processing is too complex to nest everything you can also check the solution with function calls.