Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建行为类似于CombineTest的Observable,但只发出刚刚激发的源的值_Javascript_Rxjs_System.reactive_Reactivex - Fatal编程技术网

Javascript 创建行为类似于CombineTest的Observable,但只发出刚刚激发的源的值

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) { ... }

我想创建一个可观测的,它取N个可观测源,并用N元函数对它们进行变换。每当一个源可观察对象发出一个项时,此可观察对象的onNext()将调用此函数,如:f(null,null,null,o3.val,null,null),其中o3是刚刚发出值的源

类似于CombineTest,其中调用f时,所有源的最后一个发射值组合在一起,但在f中,我们得到所有其他源的空值

f的主体可以起到开关的作用:

 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,这是您在上一条注释中引用的“标记”。