Javascript 创建行为类似于CombineTest的Observable,但只发出刚刚激发的源的值
我想创建一个可观测的,它取N个可观测源,并用N元函数对它们进行变换。每当一个源可观察对象发出一个项时,此可观察对象的onNext()将调用此函数,如:f(null,null,null,o3.val,null,null),其中o3是刚刚发出值的源 类似于CombineTest,其中调用f时,所有源的最后一个发射值组合在一起,但在f中,我们得到所有其他源的空值 f的主体可以起到开关的作用:Javascript 创建行为类似于CombineTest的Observable,但只发出刚刚激发的源的值,javascript,rxjs,system.reactive,reactivex,Javascript,Rxjs,System.reactive,Reactivex,我想创建一个可观测的,它取N个可观测源,并用N元函数对它们进行变换。每当一个源可观察对象发出一个项时,此可观察对象的onNext()将调用此函数,如:f(null,null,null,o3.val,null,null),其中o3是刚刚发出值的源 类似于CombineTest,其中调用f时,所有源的最后一个发射值组合在一起,但在f中,我们得到所有其他源的空值 f的主体可以起到开关的作用: function f(v1,v2,...vn) { if (v1) { ... }
function f(v1,v2,...vn) {
if (v1) { ... }
else if(v2) { ... }
}
这可能吗?还有其他方法可以实现这种行为吗?您可能需要考虑这样的事情
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
}
)
因此,您希望它发出一个由
null
s组成的数组,但仅在刚刚发出的源可观测值的索引处发出您想要其值的值?是的,这可能是一种奇怪的方式,您将n
可观测值组合成单个值数组,然后使用一系列if
语句来选择基于该值的代码路径发出的值。为什么不让n
可观察对象与n
订阅您需要的代码?您需要根据某个时间片选择值。否则,如果它们同时一致地生成值,您将不必要地强制进行顺序处理。这基本上不只是合并
?可能是,但我不理解代码是如何工作的,可能管道操作符引用了它吗?这与:@Fruff相同,我在这里没有使用pipe
操作符。我正在使用RxJs提供的merge
函数(import{merge}from'RxJs';
)。我提供的代码片段是这样工作的:在dataObs
变量中,您有一个由2个元素组成的数组-第一个元素是发出的值,第二个元素是标识发出值的源可观察对象的ID,这是您在上一条注释中引用的“标记”。