如何在 RXJS 中启动和停止可观察的间隔?

2024-03-30

我有一个非常简单的 timeInterval 可观察对象,我想在不断开订阅者连接的情况下启动/停止传输(无论可观察状态如何,都应该坐下来等待)。有可能吗?如果可以的话怎么办?

var source = Rx.Observable
  .interval(500)
  .timeInterval()
  .map(function (x) { return x.value + ':' + x.interval; })
  .take(10);

  var subscription = source.subscribe(
  function (x) {
     $("#result").append('Next: ' + x + ' ');
  },
  function (err) {
    $("#result").append('Error: ' + err);
  },
  function () {
    $("#result").append('Completed');
  });

一般评论:我看到的大多数示例都展示了如何定义可观察量和订阅者。我如何影响现有对象的行为?


取决于停止/恢复信号的来源。我能想到的最简单的方法是pausable操作员 https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/pausable.md,正如文档所说,它更适合热可观察量。所以在下面的示例代码中,我删除了take(10)(您的暂停信号现在通过pauser主题),并添加share将您的可观测值变成热门观测值。

  • 关于热与冷,请查看图示了各自的数据流 https://stackoverflow.com/questions/32190445/hot-and-cold-observables-are-there-hot-and-cold-operators/34669444#34669444.
  • 关于主题,您还可以查看相应的语义 https://stackoverflow.com/questions/34849873/what-are-the-semantics-of-different-rxjs-subjects/34860777#34860777
var pauser = new Rx.Subject();
var source = Rx.Observable
  .interval(500)
  .timeInterval()
  .map(function (x) { return x.value + ':' + x.interval; })
  .share()
  .pausable(pauser);

var subscription = source.subscribe(
  function (x) {
     $("#result").append('Next: ' + x + ' ');
  },
  function (err) {
    $("#result").append('Error: ' + err);
  },
  function () {
    $("#result").append('Completed');
});

  // To begin the flow
pauser.onNext(true); // or source.resume();

// To pause the flow at any point
pauser.onNext(false);  // or source.pause();

这里有一个更复杂的例子 http://jsfiddle.net/jsy2kva5/1/这将每 10 项暂停您的源:

// Helper functions
function emits ( who, who_ ) {return function ( x ) {
 who.innerHTML = [who.innerHTML, who_ + " emits " + JSON.stringify(x)].join("\n");
};}

var pauser = new Rx.Subject();
var source = Rx.Observable
  .interval(500)
  .timeInterval()
  .map(function (x) { return x.value + ':' + x.interval; })
  .share();
var pausableSource = source
  .pausable(pauser);

source
  .scan(function (acc, _){return acc+1}, 0)
  .map(function(counter){return !!(parseInt(counter/10) % 2)})
  .do(emits(ta_validation, 'scan'))
  .subscribe(pauser);

var subscription = pausableSource.subscribe(
  function (x) {
     $("#ta_result").append('Next: ' + x + ' ');
  },
  function (err) {
    $("#ta_result").append('Error: ' + err);
  },
  function () {
    $("#ta_result").append('Completed');
});

现在你应该知道第二个问题的答案了。将您获得的可观察量与相关的 RxJS 运算符相结合以实现您的用例。这就是我在这里所做的。

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

如何在 RXJS 中启动和停止可观察的间隔? 的相关文章

随机推荐

  • 从 WiX 提升的安装程序运行未提升的自定义操作

    我正在尝试弄清楚如何从提升的 WiX 安装设置程序运行自定义操作 WiX 生成的 msi 文件由 DotNetInstaller 执行 在 WiX 中 我有一个 Package 部分 其中 InstallScope 设置为 perMachi
  • Ajax 调用在 IE8 中不起作用

    我正在阅读几篇关于此的文章 并对我的代码进行了一些更改 但没有成功 任何人都可以调查一下 看看这里发生了什么 或者也许是另一种方法来完成我需要的事情 使用 ziptastic 通过邮政编码检索城市 州 该代码在 Chrome 中运行良好 h
  • __del__ 在程序结束时

    假设有一个程序 在运行时其中有几个对象 程序结束时是否调用每个对象的 del 方法 如果是的话 我可以做这样的事情 class Client del self disconnect from server 有许多潜在的困难 http doc
  • 从非托管 C++ 创建 DLL

    我目前有一个用非托管 C 编写的控制台应用程序 源代码由一个入口点组成main以及其他一些功能 我需要从此代码创建一个 DLL 以便我可以从其他项目 特别是托管 C 使用它 另一个问题 我是否必须为此目的编写一个包装类 由于我对托管 非托管
  • 如何使用 FastAPI 返回 HTMLResponse

    是否可以在端点显示 HTML 文件 例如用户正在访问的主页 是的 FastAPI 可能有HTMLResponse 您可以返回一个HTMLResponse from fastapi import FastAPI from fastapi re
  • 无法修改函数以独立工作而不是依赖于返回的结果

    我用 python 编写了一个脚本 在向某些链接发送请求时使用代理 以便从那里解析产品名称 我目前的尝试完美地完成了这项工作 这个功能parse product 完全依赖于返回的结果 代理 以便以正确的方式重用相同的代理 我正在尝试修改pa
  • 当网格项与末端/底部对齐时,滚动不起作用

    我想使用创建聊天CSS grid并遇到了我无法合并的问题align self end and overflow y auto The ul包含所有消息并且应该与底部对齐 这样即使只有一条消息 它也会出现在底部 聊天的页眉和页脚是固定的 您只
  • ApplicationListener 的注解版本及类似接口

    您可以使用如下代码根据 Web 服务关闭 或刷新 启动 的时间执行一些事件 public class APIService implements ApplicationListener
  • 使用 jquery 移动元素

    我如何使用 jQuery 来移动元素 position absolute left 169px top 182px to position absolute left 169px top 230px 清晰的移动不仅是CSS 它也必须是移动的
  • 在 C# 中使用 ActiveX

    我有这样的 JavaScript 代码 o new ActiveXObject ASDFsome Application utilites WScript CreateObject ASDF Utilites UTF Converter u
  • 在记事本++中选择并删除整个列

    有没有办法在记事本 中选择并删除整个列 假设notepad 中有这样一条日志 Dec 14 14 49 34 Dec 14 14 49 35 Dec 14 14 49 36 Dec 14 14 49 37 我想选择并删除 JustDec在上
  • 重用 Runnable 的最佳方式

    我有一个实现的类Runnable目前我正在使用 Executor 作为线程池来运行任务 将文档索引到 Lucene executor execute new LuceneDocIndexer doc writer 我的问题是我的 Runna
  • fancyBox 3 中的转换

    是否可以指定在 fancyBox 3 中使用哪个转换 我对 3 个转变感兴趣 打开幻灯片 画廊 在幻灯片之间导航 关闭幻灯片 图库 默认情况下 fancyBox 3 对不同类型的内容使用不同的过渡 a href img jpg img sr
  • Android 意图数据库

    是否有一个意图数据库可以搜索发布公共服务的应用程序 例如 我可能有一个关于可以应用于照片应用程序中的照片的过滤器的想法 但是我应该出于什么目的发布我的过滤器以便其他应用程序可以找到它并使用它 所以问题是是否有一个或多或少标准的意图数据库以及
  • 如何在容器化世界中独特地解决“流程”?

    这是一个普遍问题 但出于争论的目的 您可以假设我们有一组通过 AMQP 和 HTTP 组合进行通信的进程 有两种具体情况需要考虑 最简单的一个 Q 如果 A 向 B 发送消息 B 如何识别 A 发送回复的位置 A A 必须以某种方式告诉 B
  • 如何在悬停时更改父
  • 的样式
  • 我有一个 WordPress 网站 在我的本地主机上 它使用 ul 用于自定义菜单 我怎样才能改变CSS li 悬停时only如果它有一个 ul 子菜单 所有主菜单项都有一个边框半径 我想在当前项目 下面的服务 上删除它 例如 div cl
  • 我可以使用 Jython 运行 numpy 和 pandas

    我们有一些 Java 代码想要与计划用 Python 编写的新代码一起使用 因此我们对使用 Jython 感兴趣 然而 我们还想使用 numpy 和 pandas 库在此 Python 代码中进行复杂的统计分析 是否可以从 Jython 调
  • 提高 Android 位图上 getpixel() 和 setpixel() 的速度

    All 当我注意到有多慢之后getPixel and setPixel是 不确定是哪一个 猜想两者都不是涡轮增压的 我快速编码了一个容器Bitmap使用int 数组来处理位图操作 已经 它明显更快 但这还不够 请问您能建议如何进一步加快速度
  • 使用 Scala 中的可变参数

    我正在抓狂地试图弄清楚如何执行以下操作 def foo msf String o Any os Any println String format msf o List os 我必须用一个来声明该方法是有原因的o and an os Seq
  • 如何在 RXJS 中启动和停止可观察的间隔?

    我有一个非常简单的 timeInterval 可观察对象 我想在不断开订阅者连接的情况下启动 停止传输 无论可观察状态如何 都应该坐下来等待 有可能吗 如果可以的话怎么办 var source Rx Observable interval