Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
Rxjs zip的替代方案,它在任何可观察对象发出值时生成值_Rxjs - Fatal编程技术网

Rxjs zip的替代方案,它在任何可观察对象发出值时生成值

Rxjs zip的替代方案,它在任何可观察对象发出值时生成值,rxjs,Rxjs,目前,只要所有压缩的可观察对象都产生一个值,zip就只会产生一个值。例如,从文档中: 将指定的可观察序列或承诺合并为一个 当所有的 可观测序列产生了一个元素 我在寻找一个可以压缩一个可观察对象的可观察对象,但会产生一个压缩可观察对象序列的数组,在这个数组中,所有的都产生一个值并不重要 e、 g.假设我有勾号$,观察值1,观察值2。。勾选$始终每x秒产生一次价值。。而observ1和observ2只能不时生成。。 我希望我的流看起来像 [tick, undefined, observ2Res],

目前,只要所有压缩的可观察对象都产生一个值,zip就只会产生一个值。例如,从文档中:

将指定的可观察序列或承诺合并为一个 当所有的 可观测序列产生了一个元素

我在寻找一个可以压缩一个可观察对象的可观察对象,但会产生一个压缩可观察对象序列的数组,在这个数组中,所有的都产生一个值并不重要

e、 g.假设我有勾号$,观察值1,观察值2。。勾选$始终每x秒产生一次价值。。而observ1和observ2只能不时生成。。 我希望我的流看起来像

[tick, undefined, observ2Res],
[tick, undefined, undefined],
[tick, observ1Res, observ2Res]
...
...

它不是combine latest,因为combine latest获取给定可观察对象的最新值。

我相信
缓冲区
(或者
示例
)可能会让您走上正确的道路。
buffer
方法接受用于定义缓冲区边界的可观察对象。结果流将发出在该窗口中发出的任何项目(例如从RXJS文档中为
缓冲区
)窃取的项目):

因此,我们现在有了一种方法,可以在特定的时间窗口内获取流发出的所有事件。在您的情况下,我们可以使用
tick$
来描述我们的采样周期,
observ1
observ2
是我们想要缓冲的底层流:

const buffered1 = observ1.buffer(tick$);
const buffered2 = observ2.buffer(tick$);
这些流中的每一个都将在每个tick$期间发出一次,并将从基础流(在该期间)发出所有已发出项的列表。缓冲的
流将发出如下数据:

|--[]--[]--[1, 2, 3]--[]-->
|--null--null--3--null-->
为了获得您想要的输出,我们可以选择只查看每个缓冲结果的最新发出的项,如果没有发出的数据,我们可以传递null:

const buffered1 = observ1.buffer($tick).map(latest);
const buffered2 = observ2.buffer($tick).map(latest);

function latest(x) {
    return x.length === 0 ? null : x[x.length - 1];
}
我前面演示的示例流现在如下所示:

|--[]--[]--[1, 2, 3]--[]-->
|--null--null--3--null-->
最后,我们可以
zip
这两个流在
tick$
间隔期间获取“最新”发出的数据:

const sampled$ = buffered1.zip(buffered2);
采样的$
流将通过
勾选$
窗口从我们的
observ1
observ2
流发出最新数据。下面是一个示例结果:

|--[null, null]--[null, 1]--[1, 2]-->

卡尔文,试过这个,我的目标是什么。不幸的是,我仍然可以投票,但我将此标记为答案。