如果 observable 在 X 时间内没有发出值,则会产生副作用

2024-03-20

我正在研究一个用例,要求如果可观察量在一定时间内没有发出值,那么我们应该做一些副作用。

给出一个实际用例:

  • 打开网络套接字连接
  • 如果在 X 时间内没有发送/接收消息,则关闭 Web 套接字连接并通知用户

这需要在每个发出的值上以及在初始订阅可观察值时启动计时器,然后在分配的时间后或直到发出计时器重置的值时运行某些函数。我正在努力以 Rx 方式做到这一点。任何帮助,将不胜感激 :)


debounceTime https://www.learnrxjs.io/operators/filtering/debouncetime.html是您正在寻找的运算符:如果在特定超时内没有其他运算符跟随,它只会发出一个值。监听第一条消息debounced Stream 会让你超时并清理你的 websocket 连接。如果您需要从流打开开始超时,您可以简单地startWith。具体来说:

messages$.startWith(null)
         .debounceTime(timeout)
         .take(1)
         .subscribe(() => { /* side effects */ });

Edit:相反,如果您希望在超时时完全结束消息流(例如,您在 onComplete 处理程序中进行清理),那么只需填充debounceTime into a takeUntil:

messages$.takeUntil(
  messages$.startWith(null)
           .debounceTime(timeout)
).subscribe(timeout_observer);

With a timeout_observable: Observer<TMessage>其中包含您的清理 onComplete。

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

如果 observable 在 X 时间内没有发出值,则会产生副作用 的相关文章

随机推荐

  • AngularStrap 选项卡加载 html 片段

    我目前正在使用 Twitter Bootstrap 开发 AngularJS 项目 并尝试将我的 Bootstrap 指令转换为 Angular 我决定使用 AngularStrap 因为它提供了对 Bootstrap Select 的支持
  • 如果 c =a,b,c 的值是多少;

    int a 0 int b 1 int c a b int d a b 在初始化之外 逗号 ina b is the 逗号运算符 并评估为b 涉及行中的括号d造成这样的情况 所以该行实际上相当于 int d b 然而 在涉及c 这不是逗号运
  • 如何解决 Java Swing 登录窗口中的这些可视化问题?

    我是 Java Swing 的新手 但我遇到了一个问题 我必须创建一个登录窗口 灵感来自这样的图像 像这样 scilicet 窗口必须显示 2 个文本字段 用户在其中插入用户名和密码以及一个按钮来执行登录操作 好的 我认为这非常简单 我已经
  • bind_param 中的参数数量未知[重复]

    这个问题在这里已经有答案了 当您不知道要接收的参数数量时 你们会怎么做 例如 if a 1 filter AND u name if b 1 filter AND u address if c 1 filter AND u age if d
  • 将布尔值序列化为“1”和“0”而不是“true”和“false”

    我在上面找不到任何方法Boolean类将布尔值序列化为 1 和 0 而不是 true 和 false 有没有本地函数可以做到这一点 如果不是 最好的方法 最优化的方法 是什么 更新 我确实想制作一个String出于一个Boolean If你
  • 将上下文变量与 IBM Watson Conversation 中的实体进行比较

    在 Watson 对话对话框中 我创建了一个条件 就像是 if stored state states Florida AND preferred joint joint KFC then some response where store
  • 安卓。如何沿对象面向的方向移动对象(使用 Vector3 和四元数)

    我正在使用 libGDX 事实上对它来说相当新 和 Android 我想沿 3d 对象所面向的方向移动 使用一定的速度 我认为这是一个基本问题 但找不到直接答案 我有一个代表对象旋转 方向 的四元数 有一个代表对象位置的 Vector3 问
  • FreeTDS - tsql 连接,isql 失败

    我正在尝试连接到我的主机 Windows XP SQL Server 05 上的数据库 我的客户机器是 Ubuntu 10 04 我可以使用 tsql 连接并执行命令 但 isql 失败 以下是我的配置文件和错误消息 freetds con
  • UITableView 部分未按预期排序

    我正在使用带有自定义部分标题的 tableView 核心数据对象根据称为 sectionIdentifier 的瞬态属性的值显示在精确的部分上 一切都按预期工作 但各部分的顺序没有按我的预期响应 这应该是部分顺序 1 OVERDUE sec
  • 匿名函数和内存消耗

    就内存消耗而言 这些是否等效 或者我们是否为后者中的每个对象获得一个新的函数实例 var f function alert this animal var items for var i 0 i lt 10 i var item anima
  • 如何重置 Apache Archiva 密码

    我正在使用 apache archiva 2 2 0 版本 我丢失了管理员密码 因此我想重置管理员用户的密码 我尝试通过删除下面提到的文件来重置密码 apache archiva 2 2 0 data databases users dbe
  • 检测 pandas.DataFrame 中的列是否是分类的好的启发式是什么?

    我一直在开发一个工具 可以自动预处理 pandas DataFrame 格式的数据 在此预处理步骤中 我想以不同的方式处理连续数据和分类数据 特别是 我希望能够应用 OneHotEncoder 等only分类数据 现在 假设我们提供了一个
  • Python 3 默认编码 cp1252 [重复]

    这个问题在这里已经有答案了 我最近在索尼 vaio windows 10 系统上使用 anaconda 4 1 1 python 3 5 2 安装从 Biopython 模块解码句柄 错误映射 0x81 0x8D 时遇到了一些问题 经过一番
  • bash 逗号分隔值的逆序

    我有以下元素列表 a b c 1337 d e 我希望我有 e d 1337 c b a 我怎样才能在 bash 中实现这一目标 你可以这样做awk bin bash awk BEGIN FS OFS for i NF i gt 0 i p
  • Maven 与 Android - R.java 文件生成 (Eclipse)

    我正在尝试将 R java 生成工作到 gen 文件夹中的项目 实际上 应用程序在使用 maven 构建时构建 但是 eclipse 发现错误 因为它无法解析 R java 文件 实际上在每次构建后放入 target generated s
  • CodeIgniter 和 Oracle 数据库 - ActiveRecord insert() 在查询中添加双引号

    我正在使用 CodeIgniter 框架版本 2 2 和 Oracle 11g 数据库 在database php中我的配置如下所示 与 CodeIgniter 的数据库连接良好 当我尝试使用 CodeIgniter 的 ActiveRec
  • c#图表控件,垂直滚动缩放问题[“Stuck Scroll bar”]

    我有一个带有大型 C 图表控件的程序 我允许用户选择任何区域来进行缩放 它将放大 这一切都很好 当我水平滚动时 这也工作得很好而且非常流畅 但是 当我尝试垂直滚动时 滚动条不会移动 我唯一能做的就是使用滚动条上的向上和向下箭头键 这只会给出
  • 使用 Popen 运行本地二进制文件时出现“文件未找到”错误

    我正在编写一个 Python 程序来使用 Popen 调用本地二进制文件来捕获其输出 我将目录更改为os chdir我已经验证该文件在那里 但是 以下代码引发 找不到文件 异常 谁能告诉我我做错了什么 从不在我的 PATH 中的目录运行程序
  • Raspberry 上的 Libtorch 无法加载 pt 文件,但可以在 ubuntu 上运行

    我正在尝试在 Raspberry PI 上使用 libtorch 构建 C 程序 该程序在 Ubuntu 上运行 但在 Raspberry 上构建时出现以下错误 error use of deleted function void torc
  • 如果 observable 在 X 时间内没有发出值,则会产生副作用

    我正在研究一个用例 要求如果可观察量在一定时间内没有发出值 那么我们应该做一些副作用 给出一个实际用例 打开网络套接字连接 如果在 X 时间内没有发送 接收消息 则关闭 Web 套接字连接并通知用户 这需要在每个发出的值上以及在初始订阅可观