当前位置: 首页 > 知识库问答 >
问题:

rxjs中第一次发射的缓冲计数(2,1)

季森
2023-03-14

我有一个可观察到的:

1----2----3----3----2----1-|

我使用

.bufferCount(2, 1)

输出为

--[1,2]-[2,3]-[3,3]-[3,2]-[2,1]-|

然后我链

.filter(twoEmissions => twoEmissions[0] !== twoEmissions[1])

这使得:

 --[1,2]-[2,3]-------[3,2]-[2,1]-|

然后我链

.map(twoEmissions => twoEmissions[1])

只留下最新的排放量,所以我的最终输出是:

-----2-----3------------2----1---|

我的问题是在这种情况下省略了第一个发射。我尝试使用BufferCount()的缓冲区(),并使用以下闭包通知程序:

bufferClosingNotifier = sourceObservable$
  .scan((acc, val, index) => (index), 0)
  .filter((index: number) => index === 0 || index > 0 && index % 2 !== 0)

它发射第一、第三、第五、第七......发射,但它们不重叠。

我怎么能有缓冲区计数(2,1),但发射源的第一次发射可观察到?

共有1个答案

阎懿轩
2023-03-14

如果您的要求如下:

给定一系列值:

1----2----3----3----2----1-|

我只希望后续的唯一值,以便结束流

1----2----3---------2----1-|

您可以使用。distinctUntilChanged()要获取此行为:

返回一个可观察的,该可观察发出的源可观察发出的与前一项相比不同的所有项。

如果提供了比较器函数,则将为每个项目调用它来测试是否应该发出该值。

如果未提供比较器函数,则默认情况下使用相等检查。

Rx.Observable.from([1,2,3,3,2,1])
  .distinctUntilChanged()
  .subscribe(val => console.log(val))
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.5/Rx.js"></script>
 类似资料:
  • 我有一个定期发出JavaScript对象的行为主题。我想构建另一个可观察对象,它将发出底层可观察对象的先前和当前值,以便比较两个对象并确定增量。 pairwise()或bufferCount(2,1)操作符看起来很合适,但它们只有在缓冲区填满后才开始发出,但我要求这个可观察对象从基础可观察对象的第一个事件开始发出。 在第一次发射时,可能只是。 是否有一些内置的运算符,我可以使用以达到预期的结果?

  • 我正在尝试使用RxJava创建一个顺序下载服务。用户可以批量添加项目(20、30等)或单个项目。这些项目将被添加到队列中,然后以10个批次的顺序下载。为此,我使用PublishSubject: 它发出用户添加的项(ID),然后将缓冲区操作符应用于批处理项。使用这些ID,可以在flatMap中下载项目,并在订阅的onNext中返回。 代码大部分按预期工作。项目已成功批处理并下载,但即使在发出所有项目

  • 我在OpenGL方面有半经验,目前正在为2D游戏开发简单的照明。我的计划如下: 创建一个统一的缓冲区对象,以存储表示场景中所有活动灯光的两个矢量数组:一个用于位置,一个用于颜色 在我的顶点着色器中将该均匀缓冲区对象作为均匀对象(显然)。以某种方式转换数据,并将其复制到与统一格式相同的输出接口块(抱歉,如果这是混淆/不正确的术语,请不要犹豫要求澄清) 使用顶点着色器输出的界面块作为片段着色器的输入,

  • 出于性能的考虑,servlet 容器允许(但不要求)缓存输出到客户端的内容。一般的,服务器是默认执行缓存,但应该允许 servlet 来指定缓存参数。 下面是 ServletResponse 接口允许 servlet 来访问和设置缓存信息的方法: getBufferSize setBufferSize isCommitted reset resetBuffer flushBuffer 不管 ser

  • 问题内容: 在从事2D游戏时,我读了很多有关Double Buffering的文章。我遇到了许多不同的实施策略,但不确定如何将Double Buffering放入我创建游戏窗口的方式中。例如,我遇到的一篇文章(http://content.gpwiki.org/index.php/Java:Tutorials:Double_Buffering)建议使用一种单独的绘制方法;但是,我怀疑如果您正在绘制

  • 正在为以下内容编写javadoc: 但是,将缓冲的输入流传入真的是一个问题吗?因此: 是否将is缓冲到bis中,或者java是否检测到is已缓冲并设置bis=is?如果是,不同的缓冲区大小是否会有所不同?如果没有,为什么不呢<注意:我说的是输入流,但实际上这个问题也适用于输出流