Not too much, I promise
myObservable.subscribe(
data => {
if (data >= 42) {
const modifiedData = data / 2
doSomethingWith(modifiedData)
}
}
)
// Ou dans un style plus fonctionnel :
myObservable
.filter(data => data >= 42)
.map(data => data / 2)
.subscribe(doSomethingWith)
...Et RxJS (ou autre) pour se simplifier la vie
const observable1 = Rx.Observable.from([1, 2, 3, 4]);
const observable2 = Rx.Observable.interval(1000);
const observable3 = Rx.Observable.create(observer => {
fetch("https://jsonplaceholder.typicode.org/posts/1")
.then(resp => resp.json())
.then(body => {
observer.next(body)
observer.complete()
)
.catch(err => observer.error(err))
});
const observable = ...
observable.subscribe({
next: x => console.log(`Observable sent a value: ${x}`),
error: err => console.error(`Observable sent an error: ${err}`),
complete: () => console.log('Observable is complete')
});
Transformer, combiner, manipuler des observables (mais toujours de manière immutable)
const modifiedObservable = myObservable
.filter(x => x > 10)
const modifiedObservable = myObservable
.map(x => x * 10)
const modifiedObservable = Rx.Observable.merge(
observable1,
observable2
)
const modifiedObservable = myObservable
.delay(1000)
const modifiedObservable = myObservable
.debounce(1000)
Anatomie d'un observable
Il faut l'appeler (subscribe) pour qu'il se passe quoi que ce soit.
Il y a probablement deux appels à l'observable (subscribe)
Cold : L'observable crée la source de données à chaque appel (subscribe)
Hot : L'observable utilise une source de données existante
Ni l'un ni l'autre : c'est juste une fonction!
Et pour les opérateurs, pas de secret : http://reactivex.io/rxjs
Programmation réactive fonctionnelle.
Manipuler des données c'est bien, Mais le web c'est aussi :
A functional and reactive JavaScript framework for cleaner code
CycleJS se charge :
L'application est purement réactive, fonctionelle, déclarative
Drivers inclus :
Drivers Communautaires :
Exemple: Compteur