【问题标题】:Simple observable/observer in rxjsrxjs 中的简单可观察/观察者
【发布时间】:2016-12-18 07:30:19
【问题描述】:

我尝试了 2 种不同的方法来设置观察者/可观察者以使这段代码正常工作:

设置 #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: Cannot read property 'next' of undefined”,这是有道理的,因为还没有观察者订阅,所以 xObserver 尚未初始化。

使用“Setup #2”我得到一个错误“TypeError: xObserver.next is not a function”。

我做错了什么?

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    用途:

    let xObs = new Rx.Subject();
    

    当您使用.create 时,您必须提供一个观察者,有关详细信息,请参阅docs


    另一个陷阱可能是版本,在版本 .onNext():

    xObs.onNext("myData");
    

    https://jsfiddle.net/mzkmuewf/

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

    xObs.next("myData");
    

    https://jsfiddle.net/j1sksg7q/

    【讨论】:

    • 其实这行不通。 subject.next 在我这样做时未定义:``` var subject = new Rx.Subject();主题.下一个(123); ```
    • 你没有使用 rxjs .onNext() - 因为您在代码中编写了 .next,所以我假设您正在使用 >5.x.x
    • 看起来我使用的是 4.1.0,因为它是 npm 上的最新版本。奇怪的是.next 在其他情况下使用相同版本的rxjs
    • 它适用于您的.onNext() 吗? - 我为这两个版本添加了两个 live-fiddle,一切正常。
    • 是的,.onNext 有效。现在我要在 github repo 上打开一个问题,问为什么 v5 不在 npm 上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2011-06-09
    • 2011-06-17
    • 2014-03-24
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多