Zip 可重放的 RxJS 可观察对象
Zip replayable RxJS observables
我想以类似于 zip
的方式组合几个保存最后一个值(BehaviorSubject
在这种情况下)的可重放不完整可观察对象,但要使生成的可观察对象发出一个值当任何源 observables 发出时。
这是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"}
如何做到这一点?
使用combineLatest()
运算符:
const foobar$ = Rx.Observable.combineLatest(foo$, bar$);
我想以类似于 zip
的方式组合几个保存最后一个值(BehaviorSubject
在这种情况下)的可重放不完整可观察对象,但要使生成的可观察对象发出一个值当任何源 observables 发出时。
这是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"}
如何做到这一点?
使用combineLatest()
运算符:
const foobar$ = Rx.Observable.combineLatest(foo$, bar$);