angular 8 : rxjsintroduction angular la methode´ subscribe() prend trois parametre` 1 la premiere...

41
Angular 8 : RxJS Achref El Mouelhi Docteur de l’universit ´ e d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ing ´ enieur en g ´ enie logiciel [email protected] H & H: Research and Training 1 / 32

Upload: others

Post on 03-Jun-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Angular 8 : RxJS

Achref El Mouelhi

Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)

Ingenieur en genie logiciel

[email protected]

H & H: Research and Training 1 / 32

Page 2: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Plan

1 Introduction

2 Observable

3 Observer

4 Operateurs

5 Combinaison d’operateurs

6 Operateurs d’agregations

7 Fusion d’observables

8 Subject

9 Behavior Subject

10 Replay Subject

11 Async Subject

H & H: Research and Training 2 / 32

Page 3: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Introduction

AngularProgrammation reactive

paradigme de programmation oriente flux de donnees etpropagation des changements

inspire du patron de conception observable

Deux concepts importants :

Observable : une fonction retournant un flux de valeurs a unobservateur de maniere synchrone ou asynchrone. Un observables’execute s’il y a un observateur (observer) et un abonnement(avec la methode subscribe())

Observer : un element (objet) qui se souscrit (subscribe()) a unobservable pour recevoir les changements et executer une suite decode

RxJS : Reactive extensions for JavaScript

H & H: Research and Training 3 / 32

Page 4: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Introduction

AngularProgrammation reactive

paradigme de programmation oriente flux de donnees etpropagation des changements

inspire du patron de conception observable

Deux concepts importants :

Observable : une fonction retournant un flux de valeurs a unobservateur de maniere synchrone ou asynchrone. Un observables’execute s’il y a un observateur (observer) et un abonnement(avec la methode subscribe())

Observer : un element (objet) qui se souscrit (subscribe()) a unobservable pour recevoir les changements et executer une suite decode

RxJS : Reactive extensions for JavaScript

H & H: Research and Training 3 / 32

Page 5: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Introduction

Angular

La methode subscribe() prend trois parametre

1 la premiere se declenche a chaque fois que l’observable emet denouvelles donnees (ces donnees sont recues comme parametre)

2 la deuxieme se declenche si l’observable emet une erreur, etrecoit cette erreur comme parametre

3 la troisieme se declenche lorsque l’observable se termine, et nerecoit aucun parametre.

H & H: Research and Training 4 / 32

Page 6: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Introduction

Angular

Pour commencer

creez un composant observable

ajoutez <app-observable>< /app-observable> dansapp.component.html

H & H: Research and Training 5 / 32

Page 7: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Introduction

Le fichier observable.component.ts

import { Component, OnInit } from ’@angular/core’;

@Component({selector: ’app-observable’,templateUrl: ’./observable.component.html’,styleUrls: [’./observable.component.css’]

})export class ObservableComponent implements OnInit {

status = ’’;tab: Array<number> = [];constructor() { }ngOnInit() { }

}

Le fichier observable.component.html

<h1>elements</h1><ul>

<li *ngFor="let elt of tab">{{ elt }}

</li></ul><div>{{ status }}</div>

H & H: Research and Training 6 / 32

Page 8: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Introduction

Le fichier observable.component.ts

import { Component, OnInit } from ’@angular/core’;

@Component({selector: ’app-observable’,templateUrl: ’./observable.component.html’,styleUrls: [’./observable.component.css’]

})export class ObservableComponent implements OnInit {

status = ’’;tab: Array<number> = [];constructor() { }ngOnInit() { }

}

Le fichier observable.component.html

<h1>elements</h1><ul>

<li *ngFor="let elt of tab">{{ elt }}

</li></ul><div>{{ status }}</div>

H & H: Research and Training 6 / 32

Page 9: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Observable

AngularPour creer un observable, on peut utiliser la methode of() qui convertit unensemble de parametres en observable

import { Component, OnInit } from ’@angular/core’;import { Observable, of } from ’rxjs’;

@Component({selector: ’app-observable’,templateUrl: ’./observable.component.html’,styleUrls: [’./observable.component.css’]

})export class ObservableComponent implements OnInit {

status = ’’;tab: Array<number> = [];constructor() { }ngOnInit(): void {const observable: Observable<number> = of(1, 2, 3);

}}

H & H: Research and Training 7 / 32

Page 10: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Observable

AngularOn peut utiliser from() pour construire un observable a partir d’un tableau

import { Component, OnInit } from ’@angular/core’;import { Observable, from } from ’rxjs’;

@Component({selector: ’app-observable’,templateUrl: ’./observable.component.html’,styleUrls: [’./observable.component.css’]

})export class ObservableComponent implements OnInit {

status = ’’;tab: Array<number> = [];constructor() { }ngOnInit() {const tableau = [1, 2, 3];const observable: Observable<number> = from(tableau);

}}

H & H: Research and Training 8 / 32

Page 11: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Observable

Angular

On peut utiliser range() pour definir un interval de nombre entier

import { Component, OnInit } from ’@angular/core’;import { Observable, range } from ’rxjs’;

@Component({selector: ’app-observable’,templateUrl: ’./observable.component.html’,styleUrls: [’./observable.component.css’]

})export class ObservableComponent implements OnInit {

status = ’’;tab: Array<number> = [];constructor() { }ngOnInit() {const observable: Observable<number> = range(1, 3)

}}

H & H: Research and Training 9 / 32

Page 12: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Observer

Angular

Lorsqu’un observateur s’abonne a notre observable, il peut implementer troismethodes pour specifier ce qu’il faut faire

ngOnInit() {const tableau = [1, 2, 3];const observable: Observable<number> = from(tableau);const observer: Observer<number> = {next: (value) => {

this.tab.push(value);},error: (error) => {

this.status = error;},complete: () => {

this.status = ’fini’;}

};observable.subscribe(observer);

}

H & H: Research and Training 10 / 32

Page 13: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Observer

AngularOn peut aussi directement faire

ngOnInit() {const tableau = [1, 2, 3];const observable: Observable<number> = from(tableau);observable.subscribe((value) => {

this.tab.push(value);},(error) => {

this.status = error;},() => {

this.status = ’fini’;}

);}

L’emission de valeurs s’effectue d’une maniere synchrone et par consequent on nevoit pas la reception des elements dans le navigateur.

H & H: Research and Training 11 / 32

Page 14: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Observer

Angular

Pour avoir une execution asynchrone, on utilise la fonction interval(1000)une infinite de valeurs incrementielles commencant de 0 : une valeur parseconde

ngOnInit() {const observable: Observable<number> = interval(1000);observable.subscribe((value) => {

this.tab.push(value);},(error) => {

this.status = error;},() => {

this.status = ’fini’;}

);}

H & H: Research and Training 12 / 32

Page 15: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Observer

Pour avoir une execution asynchrone, on utilise la fonction timer(3000,1000) qui envoie une infinite de valeurs incrementielles commencant de 0 : unevaleur par seconde la premiere valeur sera envoyee apres 3 secondes

ngOnInit() {const observable: Observable<number> = timer(3000, 1000);observable.subscribe((value) => {

this.tab.push(value);},(error) => {

this.status = error;},() => {

this.status = ’fini’;}

);}

Les deux fonctions timer() et interval() ne se terminent jamais.

H & H: Research and Training 13 / 32

Page 16: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Observer

Pour eviter les problemes de memoire, il faut penser a se desabonner a la destruction ducomposant

import { Component, OnInit, OnDestroy } from ’@angular/core’;import { Observable, Subscription, timer } from ’rxjs’;@Component({selector: ’app-observable’,templateUrl: ’./observable.component.html’,styleUrls: [’./observable.component.css’]

})export class ObservableComponent implements OnInit, OnDestroy {tab: Array<number> = [];status = ’’;constructor() { }subscription: Subscription;ngOnInit() {

const observable: Observable<number> = timer(3000, 1000);this.subscription = observable.subscribe(

(value) => { this.tab.push(value); },(error) => { this.status = error; },() => { this.status = ’fini’; }

);}ngOnDestroy() { this.subscription.unsubscribe(); }

}

H & H: Research and Training 14 / 32

Page 17: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Operateurs

AngularPour indiquer le nombre d’element a emettre, on utilise la methode pipe() qui nouspermet de faire appel a l’operateur take()

ngOnInit() {const observable: Observable<number> = interval(1000).pipe(take(10));

observable.subscribe((value) => {this.tab.push(value);

},(error) => {this.status = error;

},() => {this.status = ’fini’;

});

}

On peut importer les operateurs ainsi : import { take } from ’rxjs/operators’;

H & H: Research and Training 15 / 32

Page 18: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Combinaison d’operateurs

AngularOn peut combiner les operateurs en appliquant une modification sur les 10elements recus

ngOnInit() {const observable: Observable<number> = interval(1000).pipe(

take(10),map(elt => elt + 3)

);

observable.subscribe((value) => {

this.tab.push(value);},(error) => {

this.status = error;},() => {

this.status = ’fini’;}

);}

H & H: Research and Training 16 / 32

Page 19: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Combinaison d’operateurs

AngularOn peut aussi filtrer les elements pairs

ngOnInit() {const observable: Observable<number> = interval(1000).pipe(

take(10),map(elt => elt + 3),filter(elt => elt % 2 === 0)

);

observable.subscribe((value) => {

this.tab.push(value);},(error) => {

this.status = error;},() => {

this.status = ’fini’;}

);}

H & H: Research and Training 17 / 32

Page 20: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Operateurs d’agregations

AngularOn peut aussi compter les elements selon un critere

ngOnInit() {const observable: Observable<number> = interval(1000).pipe(

take(10),count(elt => elt % 2 === 0)

);

observable.subscribe((value) => {

this.tab.push(value);},(error) => {

this.status = error;},() => {

this.status = ’fini’;}

);}

H & H: Research and Training 18 / 32

Page 21: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Operateurs d’agregations

AngularOn peut selectionner le maximum

ngOnInit() {const observable: Observable<number> = interval(1000).pipe(

take(10),max()

);

observable.subscribe((value) => {

this.tab.push(value);},(error) => {

this.status = error;},() => {

this.status = ’fini’;}

);}

H & H: Research and Training 19 / 32

Page 22: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Fusion d’observables

AngularOn peut fusionner plusieurs observables grace a la fonction merge()

ngOnInit() {const tableau = [1, 2, 3];const observable1: Observable<number> = of(1, 2, 3);const observable2: Observable<number> = of(4, 5, 6);const merged = merge(

observable1,observable2

);

merged.subscribe((value) => {this.tab.push(value);

},(error) => {this.status = error;

},() => {this.status = ’fini’;

});

}

H & H: Research and Training 20 / 32

Page 23: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Subject

Angular

Subject

Il a a la fois le role d’un observateur et d’un observable

Il autorise la souscription de plusieurs observateurs

H & H: Research and Training 21 / 32

Page 24: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Subject

AngularDans ngOnInit(), commencons par declarer un Subject

const subject = new Subject<number>();

Plusieurs observateurs peuvent s’abonner a notre subject

subject.subscribe({next: (value) => console.log(‘A : ${value}‘)

});subject.subscribe({

next: (value) => console.log(‘B : ${value}‘)});

Introduisons deux nouvelles valeurs a notre subject

subject.next(1);subject.next(2);// le resultat est// A : 1// B : 1// A : 2// B : 2

H & H: Research and Training 22 / 32

Page 25: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Subject

AngularDans ngOnInit(), commencons par declarer un Subject

const subject = new Subject<number>();

Plusieurs observateurs peuvent s’abonner a notre subject

subject.subscribe({next: (value) => console.log(‘A : ${value}‘)

});subject.subscribe({

next: (value) => console.log(‘B : ${value}‘)});

Introduisons deux nouvelles valeurs a notre subject

subject.next(1);subject.next(2);// le resultat est// A : 1// B : 1// A : 2// B : 2

H & H: Research and Training 22 / 32

Page 26: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Subject

AngularDans ngOnInit(), commencons par declarer un Subject

const subject = new Subject<number>();

Plusieurs observateurs peuvent s’abonner a notre subject

subject.subscribe({next: (value) => console.log(‘A : ${value}‘)

});subject.subscribe({

next: (value) => console.log(‘B : ${value}‘)});

Introduisons deux nouvelles valeurs a notre subject

subject.next(1);subject.next(2);// le resultat est// A : 1// B : 1// A : 2// B : 2

H & H: Research and Training 22 / 32

Page 27: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Subject

Un Subject est aussi un observateur, il peut donc s’abonner a un observable

ngOnInit() {const subject = new Subject<number>();subject.subscribe({

next: (value) => console.log(‘A : ${value}‘)});subject.subscribe({

next: (value) => console.log(‘B : ${value}‘)});const observable: Observable<number> = from([1, 2, 3]);

observable.subscribe(subject);}

Le resultat est

// A : 1// B : 1// A : 2// B : 2// A : 3// B : 3

H & H: Research and Training 23 / 32

Page 28: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Subject

Un Subject est aussi un observateur, il peut donc s’abonner a un observable

ngOnInit() {const subject = new Subject<number>();subject.subscribe({

next: (value) => console.log(‘A : ${value}‘)});subject.subscribe({

next: (value) => console.log(‘B : ${value}‘)});const observable: Observable<number> = from([1, 2, 3]);

observable.subscribe(subject);}

Le resultat est

// A : 1// B : 1// A : 2// B : 2// A : 3// B : 3

H & H: Research and Training 23 / 32

Page 29: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Subject

Angular

Remarque

Un observable ne peut avoir qu’un seul observateur

Un observable peut utiliser l’operateur multicast et unsubject pour avoir plusieurs observateurs

L’observable devient ainsi un ConnectableObservable etutilise la methode connect pour propager les changements

H & H: Research and Training 24 / 32

Page 30: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Subject

Exemple

const observable: Observable<number> = from([1, 2, 3]);const subject = new Subject<number>();

const multicasted = observable.pipe(multicast(subject)) asConnectableObservable<number>;

multicasted.subscribe({next: (value) => console.log(‘A : ${value}‘)

});multicasted.subscribe({

next: (value) => console.log(‘B : ${value}‘)});multicasted.connect();

Le resultat est

// A : 1// B : 1// A : 2// B : 2// A : 3// B : 3

H & H: Research and Training 25 / 32

Page 31: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Subject

Exemple

const observable: Observable<number> = from([1, 2, 3]);const subject = new Subject<number>();

const multicasted = observable.pipe(multicast(subject)) asConnectableObservable<number>;

multicasted.subscribe({next: (value) => console.log(‘A : ${value}‘)

});multicasted.subscribe({

next: (value) => console.log(‘B : ${value}‘)});multicasted.connect();

Le resultat est

// A : 1// B : 1// A : 2// B : 2// A : 3// B : 3

H & H: Research and Training 25 / 32

Page 32: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Subject

AngularPour se desabonner, on appelle la methode unsubscribe() depuis la souscription

ngOnInit() {const observable: Observable<number> = interval(1000).pipe(take(10)

);

const subject = new Subject<number>();

const multicasted = observable.pipe(multicast(subject)) asConnectableObservable<number>;

const a = multicasted.subscribe({next: (value) => console.log(‘A : ${value}‘)

});

const b = multicasted.subscribe({next: (value) => console.log(‘B : ${value}‘)

});

multicasted.connect();

setTimeout(() => a.unsubscribe(), 3000);setTimeout(() => b.unsubscribe(), 5000);

}

H & H: Research and Training 26 / 32

Page 33: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Behavior Subject

Angular

Behavior Subject

Une des variantes de Subject fonctionnant avec la notion devaleur actuelle

Il stocke la derniere valeur emise par ses observateurs

Chaque fois qu’un nouvel observateur s’abonne, il recoitimmediatement la valeur actuelle

Le constructeur de la classe BehaviorSubject prend commeparametre la valeur initiale

H & H: Research and Training 27 / 32

Page 34: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Behavior Subject

AngularExemple

ngOnInit() {const subject = new BehaviorSubject(0);subject.subscribe({

next: (value) => console.log(‘A : ${value}‘)});subject.next(1);subject.next(2);subject.subscribe({

next: (value) => console.log(‘B : ${value}‘)});subject.next(3);

}

Le resultat est

// A : 0// A : 1// A : 2// B : 2// A : 3// B : 3

H & H: Research and Training 28 / 32

Page 35: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Behavior Subject

AngularExemple

ngOnInit() {const subject = new BehaviorSubject(0);subject.subscribe({

next: (value) => console.log(‘A : ${value}‘)});subject.next(1);subject.next(2);subject.subscribe({

next: (value) => console.log(‘B : ${value}‘)});subject.next(3);

}

Le resultat est

// A : 0// A : 1// A : 2// B : 2// A : 3// B : 3

H & H: Research and Training 28 / 32

Page 36: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Replay Subject

Angular

ReplaySubject

Une des variantes de Subject fonctionnant avec la notion denombre de valeurs a conserver dans l’historique

Il conserve un nombre de valeurs dans l’historique afin qu’ellespuissent etre envoyees aux nouveaux abonnes.

Le constructeur de la classe ReplaySubject prend commeparametre le nombre de valeurs a conserver dans l’historique

H & H: Research and Training 29 / 32

Page 37: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Replay Subject

Exemple

ngOnInit() {const subject = new ReplaySubject<number>(2);subject.next(0);subject.subscribe({

next: (value) => console.log(‘A : ${value}‘)});subject.next(1);subject.next(2);subject.subscribe({

next: (value) => console.log(‘B : ${value}‘)});subject.next(3);

}

Le resultat est

// A : 0// A : 1// A : 2// B : 1// B : 2// A : 3// B : 3

H & H: Research and Training 30 / 32

Page 38: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Replay Subject

Exemple

ngOnInit() {const subject = new ReplaySubject<number>(2);subject.next(0);subject.subscribe({

next: (value) => console.log(‘A : ${value}‘)});subject.next(1);subject.next(2);subject.subscribe({

next: (value) => console.log(‘B : ${value}‘)});subject.next(3);

}

Le resultat est

// A : 0// A : 1// A : 2// B : 1// B : 2// A : 3// B : 3

H & H: Research and Training 30 / 32

Page 39: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Async Subject

Angular

Async Subject

Une des variantes de Subject

Il envoie seulement la derniere valeur a ses observateurs et c’estlorsqu’il finit quel que soit l’ordre de leur abonnement

Pour signaler sa fin, il appelle la methode complete

H & H: Research and Training 31 / 32

Page 40: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Async Subject

AngularExemple

ngOnInit() {const subject = new AsyncSubject();

subject.next(0);subject.subscribe({

next: (value) => console.log(‘A : ${value}‘)});subject.next(1);subject.next(2);subject.subscribe({

next: (value) => console.log(‘B : ${value}‘)});subject.next(3);

subject.complete();}

Le resultat est

// A : 3// B : 3

H & H: Research and Training 32 / 32

Page 41: Angular 8 : RxJSIntroduction Angular La methode´ subscribe() prend trois parametre` 1 la premiere se d` eclenche´ a chaque fois que l’observable` emet de´ nouvelles donnees (ces

Async Subject

AngularExemple

ngOnInit() {const subject = new AsyncSubject();

subject.next(0);subject.subscribe({

next: (value) => console.log(‘A : ${value}‘)});subject.next(1);subject.next(2);subject.subscribe({

next: (value) => console.log(‘B : ${value}‘)});subject.next(3);

subject.complete();}

Le resultat est

// A : 3// B : 3

H & H: Research and Training 32 / 32