reactive frustrations

38
Reactive Frustrati ons Futurice & upday @tpolansk Tomek Polanski

Upload: tomasz-polanski

Post on 17-Feb-2017

128 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Reactive Frustrations

Reactive Frustrations

Futurice & upday

@tpolansk

Tomek Polanski

Page 2: Reactive Frustrations

The Stages of Rx

@tpolansk

Page 3: Reactive Frustrations

The Amazement

@tpolansk

0 – 4 months

Page 4: Reactive Frustrations

The Frustration

@tpolansk

4 months – 1 year

Page 5: Reactive Frustrations

Cautious Optimism

@tpolansk

1 year – 3+ years

Page 6: Reactive Frustrations

Anonymous class

@tpolansk

Page 7: Reactive Frustrations

button.setListener( new OnClickListener() {

@Overridepublic void onClick(View v) {

println(“Hi”); }});

@tpolansk

Page 8: Reactive Frustrations

button.setListener(v -> println(“Hi”));

@tpolansk

Page 9: Reactive Frustrations

Forgetting to subscribe

@tpolansk

Page 10: Reactive Frustrations

just(“Will this work?”) .doOnNext(text -> println(text)) .subscribe(…)

@tpolansk

Page 11: Reactive Frustrations

How Do Observables

Behave?@tpolansk

Page 12: Reactive Frustrations

combineLatest(first, second, (f, s) -> f + s) .doOnNext(value -> println(value))

@tpolansk

first second

println(value) .…

Page 13: Reactive Frustrations

concat(first, second) .doOnNext(value -> println(value))

@tpolansk

first second println(value)

Page 14: Reactive Frustrations

Observable<…> getValue()Observable<…> getValueOnce()

Observable<…> getValueStream()

Observable<…> getValueOnceAndStream()

@tpolansk

Page 15: Reactive Frustrations

combineLatest(firstOnce, secondOnceAndStream, (f, s) -> f + s) .doOnNext(value -> println(value))

@tpolansk

firstOnce secondOnceAndStream

Page 16: Reactive Frustrations

concat(firstOnce, secondStream) .doOnNext(value -> println(value))

@tpolansk

firstOnce secondStream

Page 17: Reactive Frustrations

Too Many Events

@tpolansk

Page 18: Reactive Frustrations

Observable<R> x(Func1<T, Observable<R>> func)

@tpolansk

Func1< > func

TObservable<R> Observable<R>

flatMap, switchMap and concatMapflatMap switchMap concatMap

Page 19: Reactive Frustrations

Crashing Errors

@tpolansk

Page 20: Reactive Frustrations

getCountStream() .subscribe(count -> println(count)

@tpolansk

) , error -> println(error))

Page 21: Reactive Frustrations

Costly subscribe

@tpolansk

Page 22: Reactive Frustrations

@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))

Page 23: Reactive Frustrations

just(blockingFunc())

@tpolansk

fromCallable(() -> blockingFunc())

just blockingFunc()

fromCallable () -> blockingFunc()

Page 24: Reactive Frustrations

Observable<…> obs = fromCallable(() -> expensiveFunc())

@tpolansk

expensiveFunc()

obs.subscribe(…)obs.subscribe(…)

1x2x

Page 25: Reactive Frustrations

Wrong Threads

@tpolansk

Page 26: Reactive Frustrations

@tpolansk

create(subscriber -> subscriber.onNext(1)) subscriber -> subscriber.onNext(1) .subscribeOn(…) .subscribeOn(…) .observeOn(…) .map(val -> val + 1)

Page 27: Reactive Frustrations

Confusing zip

@tpolansk

Page 28: Reactive Frustrations

Side-effects withdebounce

@tpolansk

Page 29: Reactive Frustrations

Leaking Subscriptions

@tpolansk

Page 30: Reactive Frustrations

Subscription s = getCountStream() .subscribe(…)

@tpolansk

subscribeSubscription s

s

s.unsubscribe()

Page 31: Reactive Frustrations

Logging Wrong Events

@tpolansk

Page 32: Reactive Frustrations

getCountStream()

@tpolansk

.doOnNext(count -> println(count)) .doOnNext(count -> println(count)) .doOnEach(notify -> println(notify))

Page 33: Reactive Frustrations

The Conclusion

@tpolansk

Page 34: Reactive Frustrations

No More Thread Synchronization

+Transforming Async Events

@tpolansk

Page 35: Reactive Frustrations

Can Make Application Truly Reactive

@tpolansk

Page 36: Reactive Frustrations

Rx Is Just a Tool

@tpolansk

Page 37: Reactive Frustrations

Don’t Be Dogmatic

@tpolansk

Page 38: Reactive Frustrations

Questions, Feedback &

Frustrations@tpolansk