2016-12-16 289 views
0

我已經試過2點不同的方式來建立一個觀察者/可觀察到使此代碼工作:簡單的觀察到/觀察員rxjs

設置#1:

var xObserver; 
var xObservable = Rx.Observable 
    .create(observer => xObserver = observer) 
    .publish() 
    .refCount(); 

設置#2:

var xObserver = Rx.Subject.create(); 
var xObservable = x; 

用法

xObserver.next('foo'); // no subscription yet, so nothing should happen 
xObservable.subscribe(v => console.log(v)); // pipe values to console 
xObserver.next('bar'); // push another value, should go to console 

當「foo」被推送給觀察者,並且只有「bar」被顯示在控制檯上時,我的期望是什麼都不會發生。

對於「Setup#1」,我收到一個錯誤「TypeError:無法讀取未定義的屬性'next',這很有意義,因爲沒有觀察者訂閱,所以xObserver尚未初始化。

「安裝程序#2」出現錯誤「TypeError:xObserver.next不是函數」。

我在做什麼錯?

回答

1

用途:

let xObs = new Rx.Subject(); 

當您使用.create你必須提供一個觀察,看到docs瞭解詳情。


另一個缺陷可能是版本,在< 5版本只有.onNext()

xObs.onNext("myData"); 

https://jsfiddle.net/mzkmuewf/

在版本> 5,只有.next()

xObs.next("myData"); 

https://jsfiddle.net/j1sksg7q/

+0

其實,這是行不通的。當我這樣做時,'subject.next'不確定: ''' var subject = new Rx.Subject(); subject.next(123); ''' – skb

+0

你不會碰巧使用rxjs <= version 4.1?在那種情況下,它會是'.onNext()' - 因爲您在代碼中編寫了'.next',我假設您正在使用> 5.xx – olsn

+0

看起來我正在使用4.1.0,因爲這是最新的可在npm上找到。奇怪的是'.next'在其他情況下可以使用同一版本的'rxjs'。 – skb