我尝试了两种不同的方法来设置观察者/观察者以使这段代码有效:
设置#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:无法读取未定义的属性',这是有道理的,因为没有观察者已经订阅,所以xObserver
尚未初始化。
使用“Setup#2”我收到错误“TypeError:xObserver.next不是函数”。
我做错了什么?
答案 0 :(得分:1)
使用:
let xObs = new Rx.Subject();
当您使用.create
时,您必须提供观察者,有关详细信息,请参阅docs。
另一个陷阱可能是版本,版本< 5只有.onNext()
:
xObs.onNext("myData");
https://jsfiddle.net/mzkmuewf/
在版本> 5,只有.next()
:
xObs.next("myData");