2016-12-16 223 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