RxJS v5 中的速率限制和计数限制事件,但也允许传递

2024-04-15

我有很多事件要发送到服务。但请求有速率限制,每个请求都有计数限制:

  • 每秒 1 个请求:bufferTime(1000)
  • 每个请求 100 个活动项目:bufferCount(100)

问题是,我不确定如何以有意义的方式将它们组合起来。

允许通过

让事情变得更加复杂的是,如果我们没有达到任何一个限制,我需要确保事件立即完成。

例如,如果在非繁忙时间只有一个事件,我不希望它实际上等待 100 个事件项才让它通过。

旧版 API

我还发现有一个bufferWithTimeOrCount它存在于 RxJS v4 中,尽管我不确定即使我拥有它我会如何使用它。

测试游乐场

这是我为您制作的 JSBin 来测试您的解决方案:

http://jsbin.com/fozexehiba/1/edit?js,控制台,输出 http://jsbin.com/fozexehiba/1/edit?js,console,output

任何帮助将不胜感激。


The bufferTime()运算符采用三个参数,结合了以下功能bufferTime and bufferCount. See http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-bufferTime http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-bufferTime.

With .bufferTime(1000, null, 3)您可以每 1000 毫秒或达到 3 个项目时创建一个缓冲区。然而,这意味着它不能保证每个缓冲区之间有 1000ms 的延迟。

所以你可以使用类似这样的东西,它非常容易使用(最多 1000 毫秒仅缓冲 3 个项目):

click$
  .scan((a, b) => a + 1, 0)
  .bufferTime(1000, null, 3)
  .filter(buffer => buffer.length > 0)
  .concatMap(buffer => Rx.Observable.of(buffer).delay(1000))
  .timestamp()
  .subscribe(console.log);

观看现场演示:http://jsbin.com/libazer/7/edit?js,控制台,输出 http://jsbin.com/libazer/7/edit?js,console,output

与您可能想要的唯一区别是第一次发射可能会延迟超过 1000 毫秒。这是因为两者bufferTime() and delay(1000)操作员会进行延迟以确保始终有至少 1000 毫秒的间隙。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RxJS v5 中的速率限制和计数限制事件,但也允许传递 的相关文章

随机推荐

  • 无法在 Android Studio 中的项目结构上添加模块

    结构项目窗口不显示所有选项 我无法添加库或模块 Check the image And this is how it should look with all the options 我尝试修复重新安装 android studio 但没有
  • 使用 CGRectZero 在 UIView 类或子类上调用 initWithFrame 意味着什么?

    我见过调用的代码initWithFrame of a UIView子类 例如UILabel with CGRectZero一切似乎都进展顺利 实例化一个是什么意思UIView具有 2D 点的子类 这似乎是CGRectZero is 它只是意
  • Dplyr,非标准评估和 Walrus 运算符和 curly-curly

    一个真正的问题 每当我需要编写 dplyr 函数时 我都会随机应变 我知道卷曲运算符可以大大简化任务 https www tidyverse org blog 2019 06 rlang 0 4 0 https www tidyverse
  • 如何使用 javascript 客户端设置 Python 服务器端

    因此 已经设置了一个在我必须构建的控制台上运行的 Python 程序 我将使用 Javascript 为应用程序构建一个 Web GUI 界面 我会怎样 A 继续处理该 Python 程序的输入 输出 而无需触及原始代码 b 通过 Java
  • 为什么我收到“Proto 类已在文件中定义”?

    第一个原型文件 main proto 位于offline目录 option java package com xxx proto option java outer classname Service1 option java multip
  • Android在布局中绘制分隔线/分隔线?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我想在布局的中间画一条线 并将其用作其他项目 如 TextView 的分隔符 有没有一个
  • OpenCV - 将 PNG 的透明部分变成白色

    我是 OpenCV 的新手 所以如果我的问题对你来说很愚蠢 请耐心等待 I have a set of images that all have a transparent border on the left and right like
  • 无法解决Python中的TypeError消息

    我一直在四处寻找 以检查为什么在第 7 行有一个 TypeError 它表示我的参数在字符串格式化期间没有转换 但可以使用 这里有没有人能够帮助我并让我知道我的代码到底出了什么问题 以便我能够纠正自己 以下是我的代码的参考 import s
  • 为什么 GETDATE() 不能用作过程参数的默认值或 EXECUTE 语句中的值?

    考虑以下存储过程 CREATE OR ALTER PROCEDURE MySchema MyProcedure myDateTimeParam DATETIME GETDATE AS BEGIN Do something spectacul
  • YouTubePlayerAPI 分发时间表?

    当我发现这个时我非常兴奋谷歌IO视频 http youtu be 3WFsx u q3Y最近 与当前选项 意图 iframe 嵌入 相比 轻松向应用程序添加 YouTube 功能非常有吸引力 令我惊讶的是 尽管距离发布已有几个月了 但除了这
  • 数据融合 - http post 插件问题

    我正在尝试使用 DataFusion 进行 http 调用 来源 GCS csv 文件 接收器 HTTP POST API 期望该文件作为 HTTP 请求的一部分 执行此操作后 我在 API 日志中收到以下错误 所需的请求部分 文件 不存在
  • 在锚链接中添加工具提示[重复]

    这个问题已经存在了 我想在文本中添加工具提示 例如 如果我有这样的代码 a href http google com title Google a 鼠标悬停时 我想显示该工具提示 使用title这是一个好方法 但是我怎样才能让它看起来更好呢
  • Excel 2010:通过外部连接替换表格而不影响其他工作表

    我有一本包含大量数据的大工作簿 在一张纸上我有一张桌子 该表用于其他工作表中使用的许多数据透视表 这些数据透视表也用于其他工作表中 该表的数据是定期手动复制的 我现在有一个外部连接可以自动导入数据 但我想避免影响其他工作表 如何使用外部连接
  • 在 ruby​​ on Rails 4 中上传图像或文件

    在这里 我想要一个关于在不使用任何 gemfile 例如 peperclip carrierwave 等 的情况下上传文件或图像的清晰概念 之前 我做了一些工作 我可以在 assets images 文件夹中上传图像 但是当我在显示页面中调
  • 转置逗号分隔字段

    我有一个如下所示的数据集 并且正在使用 SAS Enterprise Guide 6 3 data have input id state cards 134 NC NY SC 145 AL NC NY SC run 我有另一个数据集 其中
  • 像 MySQL 一样从 Firebase 检索计数数据

    当尝试从 MySQL 数据库中提取数据时 我可以执行以下操作 SELECT FROM users ORDER BY id WHERE vehicle car 例如 这应该让我获得所有驾驶汽车的用户 而不是显示驾驶摩托车的用户 Firebas
  • 表单:避免将非提交字段设置为 null

    我有一个简单的模型 源简化 class Collection public page public limit 以及表单类型 class CollectionType extends AbstractType public function
  • 调用类指针上的方法[重复]

    这个问题在这里已经有答案了 并不是说我有问题 而是我发现以下事实很奇怪 Class Shape class Shape protected int width height public Shape int a 0 int b 0 widt
  • C# Begin/EndReceive - 如何读取大数据?

    当以 1024 字节为单位读取数据时 如何继续从接收大于 1024 字节的消息的套接字读取数据 直到没有剩余数据为止 我是否应该仅使用 BeginReceive 来读取数据包的长度前缀 然后在检索到该前缀后 使用 Receive 在异步线程
  • RxJS v5 中的速率限制和计数限制事件,但也允许传递

    我有很多事件要发送到服务 但请求有速率限制 每个请求都有计数限制 每秒 1 个请求 bufferTime 1000 每个请求 100 个活动项目 bufferCount 100 问题是 我不确定如何以有意义的方式将它们组合起来 允许通过 让