web-dev-qa-db-fra.com

Quelle est la différence entre un observable et un sujet dans rxjs?

je passais par ce blog et à lire sur Observables et je ne pouvais pas comprendre la différence entre Observable et un sujet

7
Lijin Durairaj

En programmation par flux, il existe deux interfaces principales: Observable et Observer .

Observable est pour le consommateur, il peut être transformé et souscrit:

observable.map(x => ...).filter(x => ...).subscribe(x => ...)

Observer est l'interface utilisée pour alimenter une source observable:

observer.next(newItem)

Nous pouvons créer de nouveaux Observable avec un Observer :

var observable = Observable.create(observer => { 
    observer.next('first'); 
    observer.next('second'); 
    ... 
});
observable.map(x => ...).filter(x => ...).subscribe(x => ...)

Ou, nous pouvons utiliser un Subject qui implémente à la fois les interfaces Observable et Observer :

var source = new Subject();
source.map(x => ...).filter(x => ...).subscribe(x => ...)
source.next('first')
source.next('second')
12
ZahiC

Voir le document rxjs (plus d’informations et d’exemples ici): http://reactivex.io/rxjs/manual/overview.html#subject

Qu'est-ce qu'un sujet? Un sujet RxJS est un type d'observable spécial qui permet aux valeurs d'être multicastées à de nombreux observateurs. Alors que les Observables simples sont en monodiffusion (chaque observateur souscrit possède une exécution indépendante de l'observable), les sujets sont en multidiffusion.

Un sujet est comme un observable, mais peut multidiffuser à de nombreux observateurs. Les sujets ressemblent à EventEmitters: ils tiennent un registre de nombreux auditeurs.

et code, Subject étendant Observable: https://github.com/ReactiveX/rxjs/blob/master/src/internal/Subject.ts#L22

/**
 * @class Subject<T>
 */
export class Subject<T> extends Observable<T> implements SubscriptionLike {
//...
}
3
John Smith

D'un autre point de vue, il convient de noter que l'abonnement à un observable ré-exécute la fonction observable . Cela peut entraîner des problèmes de performances si la source de données est un service, par exemple.

Si vous souhaitez que plusieurs abonnés obtiennent la même valeur, vous aurez peut-être besoin d'un objet . . Pour cela, assurez-vous que votre abonnement est défini sur avant l'objet soumis à l'abonnement. la source de données. Sinon, votre processus serait bloqué.

Plus de détails ici: https://javascript.tutorialhorizon.com 2017/03/23/rxjs-subject-vs-observable/

0
VincentPerrin.com