2016-06-29 7 views
2

ich versuche zu einem Observable von einem Subject erstellt zu abonnieren, und wenn ich ohne einen Fehler-Handler abonnieren erhalte ich die Fehler this._subscribe is not a function. Ich habe this Frage gefunden, die einen ähnlichen Fehler beschrieben; aber die Antworten schienen nicht zu meiner Situation zu passen. Hier ist mein Code:zu RxJs Anmeldung beobachtbare mit OnNext Handler gibt „this._subscribe ist keine Funktion“

const subject = new Rx.Subject(); 
subject 
    .withLatestFrom(otherObservable) 
    .subscribe(
     values => { 
      // some logic 
     } 
    ); 

ich auch versucht:

const subject = new Rx.Subject(); 
subject 
    .withLatestFrom(otherObservable) 
    .subscribeOnNext(
     values => { 
      // some logic 
     } 
    ); 

und ich bekomme den gleichen Fehler. Hier ist der Stack-Trace, wenn ich versuche nur subscribe:

Observable.Rx.Observable.observableProto.subscribe.observableProto.forEach (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:2034:19)                   
WithLatestFromObservable.subscribeCore (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:4084:33)                            
WithLatestFromObservable.tryCatcher (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:63:31)                             
setDisposable [as action] (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:2082:46)                               
ScheduledItem.invokeCore (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:896:33)                                
ScheduledItem.invoke (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:884:40)                                 
runTrampoline (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:1125:37)                                  
tryCatcher (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:63:31)                                    
CurrentThreadScheduler.schedule (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:1141:45)                              
WithLatestFromObservable.Rx.ObservableBase.ObservableBase._subscribe (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:2095:32)                     
WithLatestFromObservable.Rx.Observable.observableProto.subscribe.observableProto.forEach (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:2034:19) 

und dies ist der Stack-Trace, wenn ich versuche subscribeOnNext

Observable.Rx.Observable.observableProto.subscribe.observableProto.forEach (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:2034:19) 
    WithLatestFromObservable.subscribeCore (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:4084:33) 
    WithLatestFromObservable.tryCatcher (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:63:31) 
    setDisposable [as action] (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:2082:46) 
    ScheduledItem.invokeCore (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:896:33) 
    ScheduledItem.invoke (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:884:40) 
    runTrampoline (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:1125:37) 
    tryCatcher (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:63:31) 
    CurrentThreadScheduler.schedule (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:1141:45) 
    WithLatestFromObservable.Rx.ObservableBase.ObservableBase._subscribe (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:2095:32) 
    WithLatestFromObservable.Rx.Observable.observableProto.subscribeOnNext (/home/ryan/code/redurx/node_modules/rx/dist/rx.js:2046:19) 

Wenn ich einen trivialen Fehler-Handler wie () => null-subscribe passieren ich nicht Erhalte den Fehler. Irgendwelche Ideen?

+0

Problem könnte in otherObservable sein, das ist nicht beobachtbar – user3743222

+0

Ich bekomme diesen Fehler in meinen Unit Tests, und ich gebe es 'new Observable()' als 'otherObservable', also glaube ich nicht, dass das ist Fall. –

+0

Es sei denn, es gibt ein Problem mit dem Observable, das nicht mit Werten oder etwas eingerichtet wird. –

Antwort

0

Dank user3743222 habe ich es herausgefunden. Es stellt sich (logisch tatsächlich) heraus, dass Sie keine einfache Observable abonnieren können. Es muss so konstruiert sein, dass es Werte zu beobachten hat. Ich habe die Initialisierung für otherObservable in meinen Unit-Tests von new Rx.Observable() zu Rx.Observable.just(1) geändert, und jetzt kann es abonniert werden. Ich bin ein wenig verwirrt obwohl, warum es nicht den gleichen Fehler warf, als ich sowohl einen onNext und onError Handler passierte. Aber ich nehme es.

+1

Ich denke nicht, dass "new Rx.Observable()" Teil der API ist, um ehrlich zu sein. Hast du die Dokumentation überprüft? Normalerweise erstellen Sie eine Observable, indem Sie sie von anderen über Operatoren oder über Rx.Observable.create oder über eine bestimmte Anzahl von Erstellungsoperatoren wie Rx.Observable.from usw. ableiten. Sie finden die Liste der Operatoren für die beobachtbare Erstellung hier: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/categories.md – user3743222

+0

Auch wenn Sie verstehen möchten, wie beobachtbar funktioniert, empfehle ich Ihnen, sich die folgende Frage anzuschauen. Es hilft, den Daten- und Subscription-Flow unter der Haube herauszufinden. http://stackoverflow.com/questions/32190445/hot-and-cold-observables-are-there-hot-and-cold-operators/34669444#34669444 – user3743222

+0

Ich denke, Sie haben Recht mit dem beobachtbaren Konstruktor. Ich verstehe, wie man Observable ziemlich gut benutzt; Ich habe nur versucht, einen zu Testzwecken zu konstruieren. –