2016-06-29 29 views
2

我試圖訂閱Observable創建的Subject,並且每當我訂閱沒有錯誤處理程序時,我會收到錯誤this._subscribe is not a function。我發現this的問題描述了類似的錯誤;但答案似乎不符合我的情況。這裏是我的代碼:訂閱RxJs僅使用onNext處理函數的Observable給出「this._subscribe不是函數」

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

我也試過:

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

,我也得到了同樣的錯誤。這裏是堆棧跟蹤,當我嘗試只是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) 

,這是堆棧跟蹤,當我嘗試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) 

如果我通過像() => null一個簡單的錯誤處理程序subscribe我不得到錯誤。有任何想法嗎?

+0

問題可能會在otherObservable這不是一個可觀察 – user3743222

+0

我得到在我的單元測試這個錯誤,而我傳遞'新的觀察,()''作爲otherObservable',所以我不認爲這是案件。 –

+0

除非Observable沒有設置值或什麼的問題。 –

回答

0

感謝user3743222我明白了。事實證明(在邏輯上)你不能訂閱一個普通的可觀察者。它需要以一種可以觀察的價值的方式來構建。我在我的單元測試中將otherObservable的初始化從new Rx.Observable()更改爲Rx.Observable.just(1),現在可以訂閱。我有點困惑,但爲什麼當我通過onNextonError處理程序時,它沒有拋出同樣的錯誤。但我會接受。

+1

我不認爲'新Rx.Observable()'是老實說API的一部分。你檢查過文件嗎?通常通過操作符或Rx.Observable.create或通過一定數量的創建操作符(如Rx.Observable.from等)從其他操作符派生它,從而創建觀察值。您將找到可觀察創建的操作符列表這裏:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/categories.md – user3743222

+0

另外,如果你想了解可觀察性如何工作,我建議你看看下面的問題。它有助於搞清楚數據和訂閱流程。 http://stackoverflow.com/questions/32190445/hot-and-cold-observables-are-there-hot-and-cold-operators/34669444#34669444 – user3743222

+0

我認爲你是正確的可觀察構造函數。我明白如何很好地使用observables;我只是試圖構造一個用於測試目的。 –

相關問題