【问题标题】:Zip replayable RxJS observablesZip 可重放的 RxJS 可观察对象
【发布时间】:2017-02-15 11:34:12
【问题描述】:

我想以与zip 类似的方式组合几个可重放的不完整可观察对象,它们保存最后一个值(在本例中为BehaviorSubject),但要使生成的可观察对象在任何源可观察对象发出时发出一个值。

这里是a fiddle

const foo$ = new Rx.BehaviorSubject('foo');
const bar$ = new Rx.BehaviorSubject('bar');

setTimeout(() => foo$.next('foo 1'), 1000)
setTimeout(() => bar$.next('bar 1'), 2000)

const foobar$ = Rx.Observable.zip(foo$, bar$);

foobar$.subscribe(([foo, bar]) => console.log({ foo, bar }));

由于zip 运算符的工作方式,上面的代码将输出:

{foo: "foo", bar: "bar"}

{foo: "foo 1", bar: "bar 1"}

虽然我希望它是

{foo: "foo", bar: "bar"}

{foo: "foo 1", bar: "bar"}

{foo: "foo 1", bar: "bar 1"}

如何做到这一点?

【问题讨论】:

    标签: javascript rxjs observable rxjs5


    【解决方案1】:

    使用combineLatest() 运算符:

    const foobar$ = Rx.Observable.combineLatest(foo$, bar$);
    

    您更新的演示:https://jsfiddle.net/d1wo1usx/

    【讨论】:

    • 太好了,谢谢。我的错,由于某种原因,我认为 combineLatest 仅适用于已完成的 observables,如果它是真的,没有机会尝试。
    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 2022-11-25
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多