rxjs:有什么"joining"替代 withLatestFrom 运算符的方法吗?


observable1.pipe(
withLatestFrom(observable2),
.. do something with both emitted observable values
)

withLatestFrom的问题是,如果observable2observable1之前没有发出任何事件,那么它就是一个死代码。我应该如何修改代码以确保do something with both emitted observable values在调用之前至少发出一次可观察值?也许在forkJoin周围有一些包装器?

如果你正在寻找一个可移植的操作符而不是combineLatest函数,你可以使用RxJS的combineLatestWith

observable1.pipe(
combineLatestWith(observable2),
// ... do something with both emitted observable values
)

看起来像是combinellatest操作符的用例。此操作符接受一个可观察对象数组,并等待每个数组至少发出一次。一旦所有的可观察对象都发出了,操作符就会第一次发出。之后,它会在任何可观察对象发出时发出。

你可以用startWith()强制第一次发射,你可以根据你的需要将它应用于可观察到的1和2。

observable1.pipe(
withLatestFrom(observable2.startWith(null)),
.. do something with both emitted observable values
)

NgRx提供了一个可以参考的concatLatestFrom操作符实现。它包装了withLatestFrom以产生您(和许多其他人)期望的行为,并且可能比combineLatestWith在语义上更清晰。这也适用于RxJS版本7之前:

source1$.pipe(
concatLatestFrom(source2$),
...
)

最新更新