我想创建一个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) { ... }
}
这可能吗?还有其他方法来完成这种行为吗?
答案 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
}
)