Non seulement vous pouvez émettre flux/valeur à partir d'un Subject
réellement vous peut émettre un flux/une valeur vers plusieurs Observers
. Cela signifie que vous pouvez attacher plusieurs observateurs à un Subject
. Chaque Subject
peut contenir une collection d'observateur. Lorsque vous vous abonnerez à ce sujet, il émettra un flux/une valeur pour chaque observateur de sa collection.
const subject = new Rx.Subject()
// add an observer to the list of observers of the subject
const sub1 = subject.subscribe(function(val){
console.log("observer 1", val);
});
// add another observer to the list of observers of the subject
const sub2 = subject.subscribe(function(val){
console.log("observer 2", val);
});
// notify all observers in the list with "hi there"
subject.next('hi there');
// remove observer1 from the list
sub1.unsubscribe();
Non seulement cela, vous pouvez utiliser un sujet en tant qu'observateur et le fournir à un observable. Cela signifie que vous pouvez utiliser un sujet pour "multidiffuser" un observable à plusieurs observateurs.
// To "share" the observable tick$ with two observers,
// this way, we can pipe all notifications
// through a Subject, like so
const tick$ = Rx.Observable.interval(1000);
const subject = new Rx.Subject();
subject.subscribe(function(val){
console.log('from observer 1: '+ val);
});
subject.subscribe(function(val){
console.log('from observer 2: '+ val);
});
tick$.subscribe(subject);
Afin de comprendre RxJs que vous avez à comprendre le Observer Pattern prescrit par “Gang Of Four”. Je vais vous suggérer d'essayer de comprendre le modèle d'observateur et j'espère que vous serez clair sur ce que fait la bibliothèque RxJs.
Il existe un autre merveilleux reference du livre de Learning JavaScript Design Patterns par Addy Osmani.
Soit un 'BehaviorSubject' - qui en tant que valeur initiale - soit' ReplaySubject' - qui rejoue le nombre spécifié de la valeur la plus récente - en fonction de votre cas d'utilisation (qui ne peut pas vraiment être déduit de la question). – cartant
Ceci est la réponse. 'Use 'BehaviorSubject'' – Skeptor