Upload
tomasz-polanski
View
129
Download
0
Embed Size (px)
Citation preview
Reactive Frustrations
Futurice & upday
@tpolansk
Tomek Polanski
The Stages of Rx
@tpolansk
The Amazement
@tpolansk
0 – 4 months
The Frustration
@tpolansk
4 months – 1 year
Cautious Optimism
@tpolansk
1 year – 3+ years
Anonymous class
@tpolansk
button.setListener( new OnClickListener() {
@Overridepublic void onClick(View v) {
println(“Hi”); }});
@tpolansk
button.setListener(v -> println(“Hi”));
@tpolansk
Forgetting to subscribe
@tpolansk
just(“Will this work?”) .doOnNext(text -> println(text)) .subscribe(…)
@tpolansk
How Do Observables
Behave?@tpolansk
combineLatest(first, second, (f, s) -> f + s) .doOnNext(value -> println(value))
@tpolansk
first second
println(value) .…
concat(first, second) .doOnNext(value -> println(value))
@tpolansk
first second println(value)
Observable<…> getValue()Observable<…> getValueOnce()
Observable<…> getValueStream()
Observable<…> getValueOnceAndStream()
@tpolansk
combineLatest(firstOnce, secondOnceAndStream, (f, s) -> f + s) .doOnNext(value -> println(value))
@tpolansk
firstOnce secondOnceAndStream
concat(firstOnce, secondStream) .doOnNext(value -> println(value))
@tpolansk
firstOnce secondStream
Too Many Events
@tpolansk
Observable<R> x(Func1<T, Observable<R>> func)
@tpolansk
Func1< > func
TObservable<R> Observable<R>
flatMap, switchMap and concatMapflatMap switchMap concatMap
Crashing Errors
@tpolansk
getCountStream() .subscribe(count -> println(count)
@tpolansk
) , error -> println(error))
Costly subscribe
@tpolansk
@tpolansk
create(subscriber -> subscriber.onNext(1)) .map(val -> val + 1) .filter(val -> val % 2 == 0)
create map filter
subscriber -> subscriber.onNext(1) val -> val + 1 val -> val % 2 == 0 .subscribe(val -> println(val))
just(blockingFunc())
@tpolansk
fromCallable(() -> blockingFunc())
just blockingFunc()
fromCallable () -> blockingFunc()
Observable<…> obs = fromCallable(() -> expensiveFunc())
@tpolansk
expensiveFunc()
obs.subscribe(…)obs.subscribe(…)
1x2x
Wrong Threads
@tpolansk
@tpolansk
create(subscriber -> subscriber.onNext(1)) subscriber -> subscriber.onNext(1) .subscribeOn(…) .subscribeOn(…) .observeOn(…) .map(val -> val + 1)
Confusing zip
@tpolansk
Side-effects withdebounce
@tpolansk
Leaking Subscriptions
@tpolansk
Subscription s = getCountStream() .subscribe(…)
@tpolansk
subscribeSubscription s
…
s
s.unsubscribe()
Logging Wrong Events
@tpolansk
getCountStream()
@tpolansk
.doOnNext(count -> println(count)) .doOnNext(count -> println(count)) .doOnEach(notify -> println(notify))
The Conclusion
@tpolansk
No More Thread Synchronization
+Transforming Async Events
@tpolansk
Can Make Application Truly Reactive
@tpolansk
Rx Is Just a Tool
@tpolansk
Don’t Be Dogmatic
@tpolansk
Questions, Feedback &
Frustrations@tpolansk