Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

JavaScript

Slide 3

Slide 3 text

ReactiveUI - An advanced, composable, reactive model-view-viewmodel framework

Slide 4

Slide 4 text

getDataFromNetwork() .filter(s => s != null) .map(s => s + 'transformed') .forEach(s => console.log(`next => ${s}`)) getDataFromNetwork() .filter(s => s != null) .map(s => s + 'transformed') .subscribe(s => console.log(`next => ${s}`))

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Rx.Observable.fromEvent(button, 'click') .throttleTime(1000) .map(event => event.clientX) .scan((count, clientX) => count + clientX, 0) .subscribe(count => console.log(count));

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Rx.Observable.fromEvent(document, 'mousemove') .subscribe(e => console.log(e.clientX + ', ' + e.clientY)); // "553, 239" // "550, 274" // "549, 281"

Slide 11

Slide 11 text

Rx.Observable.from(['a', 'b', 'c']) .subscribe(x => console.log(x)); // "a" // "b" // "c"

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Rx.Observable.from(['a', 'b', 'c']) .subscribe( x => console.log("next -> " + x), x => console.log("error -> " + x), () => console.log("complete")); // "next -> a" // "next -> b" // "next -> c" // "complete"

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

var foo = Rx.Observable.create(function (observer) { observer.next(Math.floor(Math.random() * 100)); observer.complete(); }); foo.subscribe(x => console.log('x: ' + x)); foo.subscribe(y => console.log('y: ' + y)); // "x: 84" // "y: 96"

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Rx.Observable.from(['a', 'b', 'c']) .scan((acc, curr) => acc + curr, '') .subscribe(x => console.log(x)); // "a" // "ab" // "abc"

Slide 18

Slide 18 text

var ints = Rx.Observable.range(0, 3); Rx.Observable.from(['a', 'b', 'c']) .zip(ints, (a, b) => a + ':' + b) .subscribe(x => console.log(x)); // "a:0" // "b:1" // "c:2"

Slide 19

Slide 19 text

getRemoteFolders() .mergeMap(folder => getRemoteFiles(folder) .map(file => [folder, file])) .subscribe(x => console.log(x[0] + '/' + x[1])); // "Documents/Receipt.pdf" // "Downloads/RxJS.zip" // "Pictures/Mum.jpg" // "Pictures/Screenshot.png"

Slide 20

Slide 20 text

Rx.Observable.fromEvent(input, 'input') .debounceTime(1000) .map(e => e.target.value) .subscribe(x => console.log(x)); // "Goo" // "Googling"

Slide 21

Slide 21 text

and more...

Slide 22

Slide 22 text

ReactiveX - Operators

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

// Don't Rx.Observable.range(1, 2) .subscribe(x => { Rx.Observable.range(0, x) .subscribe(y => console.log(x + ':' + y)); }); // Do Rx.Observable.range(1, 2) .mergeMap(x => Rx.Observable.range(0, x) .map(y => [x, y])) .subscribe(x => console.log(x[0] + ':' + x[1]));

Slide 25

Slide 25 text

// Don't Rx.Observable.range(1, 2) .mergeMap(x => Rx.Observable.range(0, x) .do(y => doSomething(x, y))) .subscribe({ complete: () => console.log('done') }); // Do Rx.Observable.range(1, 2) .mergeMap(x => Rx.Observable.range(0, x) .map(y => [x, y])) .subscribe({ next: x => doSomething(x[0], x[1]), complete: () => console.log('done') });

Slide 26

Slide 26 text

Rx.Observable.prototype.isLast = function() { var source = this; var prev = []; return Rx.Observable.create(function subscribe(observer) { source.subscribe({ next: v => { if (prev.length > 0) observer.next({ x: prev[0], isLast: false }); prev[0] = v }, error: err => observer.error(err), complete: () => { if (prev.length > 0) observer.next({ x: prev[0], isLast: true }); observer.complete() } }); }); }

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

Rx.Observable.fromEvent($('div'), 'click') .subscribe(e => console.log(e.clientX + ', ' + e.clientY));

Slide 30

Slide 30 text

Rx.Observable.interval(1000) // 1 sec .subscribe(x => console.log(x));

Slide 31

Slide 31 text

Rx.Observable.fromEvent(document, 'mousemove') .map(e => e.clientX) .filter(x => x % 2 == 0) .subscribe(x => console.log(x)); // 378 // 362 // 298

Slide 32

Slide 32 text

Rx.Observable.from(['a', 'b', 'c']) .scan((acc, curr) => acc + curr, '') .subscribe(x => console.log(x)); // "a" // "ab" // "abc" Rx.Observable.from(['a', 'b', 'c']) .reduce((acc, curr) => acc + curr, '') .subscribe(x => console.log(x)); // "abc"