46
www.luxoft.com Reactive programming demystified Datsenko Andrii <[email protected]> 16 February 2017 PRACTICAL RXJS

Andrii Datsenko «Practical RxJS»

Embed Size (px)

Citation preview

Page 1: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Reactive programming demystifiedDatsenko Andrii <[email protected]>16 February 2017

PRACTICAL RXJS

Page 2: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Who is that guy?

Andrii Datsenko Luxoft Senior JavaScript Developer 5+ years experience AngularJS, React lover http://github.com/

andrewdacenko

Page 3: Andrii Datsenko «Practical RxJS»

www.luxoft.com

WHAT IS FRONT-END ABOUT?

Page 4: Andrii Datsenko «Practical RxJS»

www.luxoft.com

REACT TO USER ACTIONS

Page 5: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Actions

Mouse events Keyboard events Data loading events Animation events File processing events Socket events Web Workers events

Page 6: Andrii Datsenko «Practical RxJS»

www.luxoft.com

WHAT IS THE KEY?

Page 7: Andrii Datsenko «Practical RxJS»

www.luxoft.com

EVENTS

Page 8: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Events love callbacks

Page 9: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Handling Events

Callbacks Promises …

Better way?

Callback Hell Single value …

Zero or more future values

Page 10: Andrii Datsenko «Practical RxJS»

www.luxoft.com

RXJS IS LODASH FOR EVENTS

Page 11: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Array Like

const x = list .map(x => x.prop) .filter(x => x > 2);

console.log(x)

list .map(x => x.prop) .filter(x => x > 2) .subscribe(x => console.log(x) );

Page 12: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Events Example

var button = document.querySelector('button');button.addEventListener('click', () => console.log('Clicked!'));

var button = document.querySelector('button');Rx.Observable.fromEvent(button, 'click') .subscribe(() => console.log('Clicked!'));

Page 13: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Observables

Observables are lazy Push collections of multiple values.

Single Multiple

Pull Function IteratorPush Promise Observable

Page 14: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Observable Creation

Page 15: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Observable Creation

Page 16: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Observable Complete

Page 17: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Observable Error

Page 18: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Observable Dispose

Page 19: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Same with JS

Page 20: Andrii Datsenko «Practical RxJS»

www.luxoft.com

HOT VS COLD

Page 21: Andrii Datsenko «Practical RxJS»

www.luxoft.com

U Hot & U Cold

Page 22: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Hot vs Cold

Cold Hot

Page 23: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Hot vs Cold

Cold Hot

Page 24: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Hot

Page 25: Andrii Datsenko «Practical RxJS»

www.luxoft.com

SUBJECT

Page 26: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Page 27: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Subject Observable Observer

Page 28: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Behavior Subject

Page 29: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Behavior Subject

Page 30: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Replay Subject

Page 31: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Replay Subject

Page 32: Andrii Datsenko «Practical RxJS»

www.luxoft.com

OPERATORS

Page 33: Andrii Datsenko «Practical RxJS»

www.luxoft.com

OPERATORS BE LIKE

Page 34: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Operators

Creation Operators create of empty fromEvent fromPromise interval …

Transform Operators map mergeMap pluck window buffer scan …

Filtering Operators filter take last debounce throttle distinctUntillChange

d …

Page 35: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Operators

Combination Operators combine concat merge race zip …

Multicasting Operators cache multicast publish share …

Error Handling Operators catch retry retryWhen

Page 36: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Marbles

Page 37: Andrii Datsenko «Practical RxJS»

www.luxoft.com

SCHEDULERS

Page 38: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Schedulers

Scheduler Purposenull Constant-time operations or tail recursive

operationsRx.Scheduler.queue Current event frame for iteration operationsRx.Scheduler.asap Micro task queue, which uses the fastest

transport mechanism availableRx.Scheduler.async setInterval for time-based operations

Page 39: Andrii Datsenko «Practical RxJS»

www.luxoft.com

REAL USE AND LIBS

Page 40: Andrii Datsenko «Practical RxJS»

www.luxoft.com

WebSockets

make wsemit messageclose connectionmake it hot

close socket

create socket

create socket

Page 41: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Real Project External updates

Internal filtersInternal sorting

Page 42: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Real Project

External updatesInternal sortingInternal filtering

Cancel existing request

Change to other ObservableDon’t fail when error occurs

And we can subscribe

Page 43: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Angular

Page 44: Andrii Datsenko «Practical RxJS»

www.luxoft.com

Redux

Page 46: Andrii Datsenko «Practical RxJS»

www.luxoft.com

THANK YOU