Programmation reactive
Comment modéliser un flux de données ?
Marble diagrams
Stream simple
Stream avec erreur
Stream avec opération
Et en RX ?
Observable.of('A','B','C')
.map(value => value.toLowerCase())
.subscribe(value => console.log(value));
Result
'a'
'b'
'c'
Classe principales
Observable
auquel on souscrit
Observer
object qui souscrit à l'Observable
onNext()
onCompleted()
onError()
- Subscription permet de gérer les sousscription
Mais pourquoi faire ça ?
- Gérer des évenemements multiples
- Avoir une approche déclarative
- Promouvoir la programmation fonctionnelle
- Eviter le callback hell
Mais à quel point est-ce puissant ?
Example 1 : Afficher une horloge
@Component({
selector: 'async-observable-pipe',
template: '<div>Time: {{ time | async }}</div>'
})
export class AsyncExample {
time = new Observable((observer) => {
setInterval(() =>{
return observer.next(new Date().toString()), 1000);
}
});
}
eazy peazy
Example 2 : Gérer les doubles clicks
let clickStream
= Rx.Observable.fromEvent(document, 'click');
clickStream
.buffer(clickStream.debounce(250))
.map(list => list.length)
.filter(x => x === 2)
.subscribe(() => console.log('doubleclick'))
eazy peazy
Conseils
- Distinguez Rx des autres API de stream
- Peut devenir complexe → expérimentez !
- N'ayez pas peur de la doc de Rx ! (example exhaust)
Pensez stream processing !