创建Observable,其行为类似于CombineLatest,但仅发出刚刚触发的源的值

时间:2018-06-06 11:21:55

标签: javascript rxjs system.reactive reactivex

我想创建一个observable,它接受N个可观察源并用N-ary函数转换它们。这个observable的onNext()将在其中一个源可观察项发出一个项时调用此函数,如下所示:f(null,null,null,o3.val,null,null)其中o3是刚刚发出值的源

就像combineLatest一样,调用f时所有源的最后一个发射值组合在一起,但在f中我们得到所有其他值的空值。

f的身体可以像一个开关:

 function f(v1,v2,...vn) {
        if (v1) { ... }
        else if(v2) { ... }
    }

这可能吗?还有其他方法来完成这种行为吗?

1 个答案:

答案 0 :(得分:2)

您可能想要考虑类似这样的事情

const obsS1 = obsSource1.pipe(map(data => [data, 'o1']));
const obsS2 = obsSource2.pipe(map(data => [data, 'o2']));
....
const obsSN = obsSourceN.pipe(map(data => [data, 'oN']));

merge(obs1, obs2, ..., obsN)
.subscribe(
  dataObs => {
    // do what you need to do
    // dataObs[0] contains the value emitted by the source Observable
    // dataObs[1] contains the identifier of the source Observable which emitted last
  }
)