Javascript 左连接2个观测值的RxJS算子

Javascript 左连接2个观测值的RxJS算子,javascript,functional-programming,rxjs,reactive-programming,Javascript,Functional Programming,Rxjs,Reactive Programming,我想左连接2个可观察对象,这样我总是从可观察对象a中获取值,除非有相应的可观察对象B中的值。在这种情况下,我想使用ObservableB中的值。这两个可观察对象应该连接,因此将类似于SQL左连接 通过阅读RxJS操作符树,我认为这是一个合乎逻辑的选择。我不清楚联接窗口是如何工作的,以及如何确保任何一个可观察的窗口都可能导致联接发生 有人能提供一个简单的例子吗?这方面似乎没有现成的操作符。但是您可能需要先zip,然后map将结果与您的自定义逻辑结合起来,以获得您想要的: zip(observabl

我想左连接2个可观察对象,这样我总是从可观察对象a中获取值,除非有相应的可观察对象B中的值。在这种情况下,我想使用ObservableB中的值。这两个可观察对象应该连接,因此将类似于SQL左连接

通过阅读RxJS操作符树,我认为这是一个合乎逻辑的选择。我不清楚联接窗口是如何工作的,以及如何确保任何一个可观察的窗口都可能导致联接发生


有人能提供一个简单的例子吗?

这方面似乎没有现成的操作符。但是您可能需要先
zip
,然后
map
将结果与您的自定义逻辑结合起来,以获得您想要的:

zip(observableA, observableB).map([a,b] =>{
if(idMatchesWithB) {return b}
else {return a}
}

您只需使用
merge
即可轻松完成此操作,将ObservableB放在第一位,然后使用
take(1)
立即完成。如果ObservableB为空,那么它将从ObservableA发出值

const a$ = of(1);
const b$ = of('a');

merge(b$, a$)
  .pipe(
    take(1),
  )
  .subscribe(console.log);

现场演示:

您所说的“来自Observable的对应值”是什么意思“?我的意思是我想加入2。e、 g.如果两个观察对象都有id属性,当它们匹配时,我希望得到的观察对象中有B的值。否则,如果不匹配,我需要A的值。如果obsA首先发射,它是否必须等待obsB的值?或者,在每个可观测发射一次后,obsA发射3个新值,它是否必须从obsB获取最新值?这个问题的规定严重不足。可观测数据是随时间变化的数据,所以您需要清楚地知道在您的案例中您希望如何处理这一方面。每当一个新项目被添加到任何一个可观察对象时,我都想加入。如果可观察对象的长度和顺序不一样,Zip会是错误的选择吗?这是我的理解。这取决于你想要实现什么。如果您使用zip并且一个可观察对象很长,那么来自该可观察对象的额外值将被忽略。或者您可能想使用CombineTest,ii由您决定。您可以检查zip和CombineTest的文档: