2016-09-25 5 views
1

erwartet verhält Ich versuche, ein solides Verständnis der Grundlagen der reaktiven Programmierung zu bekommen, so dass ich die Beispiele hier gehe durch: http://reactivex.io/rxjs/manual/tutorial.html#creating-observablesWarum nicht dieses einfache rxjs Beispiel als

Ich bin einfach Sie geben sie in einen Texteditor ein und führen sie über Knoten im Terminal aus. Das erste Beispiel erzeugt keine Ausgabe (die zweite funktioniert, es ist also kein Problem, die Bibliothek zu laden). Ich erwarte, dass es "foo" ausgibt, aber ich bekomme nichts. Warum?

var myObservable = Rx.Subject.create(); 
myObservable.subscribe(value => console.log(value)); 
myObservable.next('foo'); 

Antwort

2

Aufruf Rx.Subject.create() ohne Argumente ein AnonymousSubject schafft, die keine destination Beobachter haben:

export class Subject<T> extends Observable<T> implements ISubscription { 

    ... 

    static create: Function = <T>(destination: Observer<T>, source: Observable<T>): AnonymousSubject<T> => { 
    return new AnonymousSubject<T>(destination, source); 
    }; 

    ... 
} 

Die AnonymousSubject Implementierung von next einfach den Anruf an die destination Beobachter leitet, und wenn es nicht ein, es tut nichts:

export class AnonymousSubject<T> extends Subject<T> { 

    constructor(protected destination?: Observer<T>, source?: Observable<T>) { 
    super(); 
    this.source = source; 
    } 

    next(value: T) { 
    const { destination } = this; 
    if (destination && destination.next) { 
     destination.next(value); 
    } 
    } 

    ... 
} 

So Das Beispiel in deiner Frage tut nichts. Es ist möglich, dass dies ein einfacher Fehler im Tutorial ist, wie das Folgende foo an der Konsole angemeldet sehen:

var myObservable = new Rx.Subject(); 
myObservable.subscribe(value => console.log(value)); 
myObservable.next('foo'); 

Beachten Sie, dass der obige Code eine Subject schafft, anstatt eine AnonymousSubject.

+0

Danke für alle Details, ich schätze das wirklich - das ist sehr hilfreich. –

Verwandte Themen