如何获取第一次发生的事件,然后抑制事件 2 秒(RxJS)

2024-01-11

我认为 RxJS 应该完全适合抑制重复按钮点击 2 秒。然而,我在实施过程中遇到了困难。

var $button = $('#myButton').button();
$button
    .toObservable("click")
    //.Throttle(2000) // Wouldn't fire the first event instantly :-(
    .Subscribe(function(){ alert('clicked'); }); 

为了您的方便,我已经创建了一个 jsFiddle。你需要在这个小提琴中向下滚动,因为我只是将 Rx 粘贴到里面,因为我找不到 CDN。

http://jsfiddle.net/cburgdorf/mUMFA/2/ http://jsfiddle.net/cburgdorf/mUMFA/2/


我将 Sergey 的答案转换为 JavaScript,并认为这应该是最后的方法。

var $button = $('#myButton').button();
    $button
        .toObservable("click")
        .Take(1)
        .Merge(Rx.Observable.Empty().Delay(2000))
        .Repeat()
        .Subscribe(function(){ console.log('clicked'); }

根据我的理解,这个解决方案实际上更好,因为它不依赖副作用,这使得它在可组合性方面更好。

正如 Sergey 指出的,您甚至可以更进一步,实现您自己的组合器,如下所示:

Rx.Observable.prototype.OneInTime = function(delay){
 return this
        .Take(1)
        .Merge(Rx.Observable.Empty().Delay(delay))
        .Repeat();
};

所以我们上面的例子可以简化为:

var $button = $('#myButton').button();
    $button
        .toObservable("click")
        .OneInTime(2000)
        .Subscribe(function(){ console.log('clicked'); });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取第一次发生的事件,然后抑制事件 2 秒(RxJS) 的相关文章

  • RxJS (5.0rc4):暂停和恢复间隔计时器

    我正在使用 Rx 来保持动画时钟 每个动画帧都会将间隔刻度映射到该刻度的新值 假设我想暂停动画 最自然的方法是以某种方式暂停时钟接收 然后在稍后恢复它 取消订阅然后重新订阅并不是一个自然的选择 因为这个动画时钟是一个冷可观察的对象 我不想在
  • Angular:以可重用/干净的方法将 API 数据转换为新的数据类型

    我正在尝试将 API 响应转换为完全不同的 ViewModel 用于多个组件 a 一种解决方案是直接在 API 代理中映射 管道数据 但是如果我只想要简单的原始 API 数据 那么 API 代理的可重用性不是很好 b 此模型适配器模式可能不
  • 如何在异步管道上使用自定义管道?

    我正在尝试在异步管道上创建自定义管道 我尝试了很多解决方案 但仍然不起作用 这是代码片段 Product sort ts 自定义管道 import PipeTransform Pipe from angular core import Ob
  • rxjs asapscheduler 的执行顺序

    考虑到我有以下代码 let Rx window rxjs const of queueScheduler asapScheduler asyncScheduler animationFrameScheduler Rx const obser
  • 从角度服务通过管道传输时,rxjs catchError 不起作用

    使用 redux 和 Angular 我有以下效果 Effect public authenticate Observable
  • RxJS v5 中的速率限制和计数限制事件,但也允许传递

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

    Update 我使用的是 Java 1 6 34 没有机会升级到 Java 7 我有一个场景 每分钟只允许调用一个方法 80 次 它实际上是由第 3 方编写的服务 API 如果调用次数过多 它会 关闭 忽略调用 其 API public c
  • 如何限制登录尝试 - PHP & MySQL & CodeIgniter

    我希望能够根据失败的尝试来限制登录尝试 但我有一些问题 我应该使用 MySQL 吗 读到它可能会给数据库带来压力 我应该在每个用户和系统范围内进行限制还是仅在系统范围内进行限制 这样可以防止普通人猜测密码 我应该如何计算我的阈值 因此它会自
  • 使用 Angular HTTP Observable 的轮询 API

    在我的组件 html 中 我使用 asyncPipe 来订阅此 http 服务 该服务将 json 响应对象映射到类实例数组 这一切都很好 但我希望 http 服务每隔几秒轮询一次 我已经尝试了很多东西 比如间隔 但目前 RXJS 似乎有点
  • subject.next 不在 ngOnInit 中触发

    有谁知道为什么这段代码 从主题初始化一个值 不起作用 是否存在错误或设计使然 我究竟做错了什么 ts import Component OnInit from angular core import Subject from rxjs Co
  • 将 React 值从子级传递给父级

    我正在努力解决一些可能非常简单的事情 我的父组件是一个搜索小部件 它需要使用在单独的抽屉组件中定义的过滤器 目前 用户可以输入搜索查询 该查询会调用 API 并且需要根据抽屉组件中的选择器来过滤结果 但是 我无法将父母和孩子联系起来以实现这
  • 反应式:尝试了解Subject如何工作

    试图了解如何Subject
  • RxJS:Observable.combineLatest 与 Observable.forkJoin

    我想知道两者之间有什么区别Observable combineLatest and Observable forkJoin 据我所知 唯一的区别是forkJoin预计可观察量将完成 同时combineLatest返回最新值 不仅forkJo
  • ObserveOn 和 Scheduler.NewThread 不会观察到,如果观察者的 OnNext 被阻塞并继续

    有人可以帮助解释为什么当我 阻止并继续 观察者的 onNext 序列订阅具有时间可观察序列的缓冲区时 Scheduler NewThread 不再适用吗 例如 如果我通过缓冲一系列数字 var query from number in En
  • 如果可观察对象之一停止发出事件,为什么 Observable.race 无法工作?

    如果互联网连接丢失 我想在 webapp 中实现 websocket 重新连接 为了检测互联网是否丢失 我使用乒乓方法 这意味着我从客户端发送 ping 消息 服务器返回给我 pong 消息 当 webapp 加载时 我发送 init pi
  • RxJS 将三元组中的属性组合到表中

    我有一项服务生成类似于三元组的对象 它们将采用以下格式 country attribute value Example country usa attribute population value 100 country mexico at
  • 错误:类型 typeof Observable 上不存在属性计时器

    代码如下 import Component from angular2 core import Observable from rxjs Rx Component selector my app template Ticks every s
  • Angular 2 可观察间隔锁定 UI

    当我使用Observable Interval要执行 UI 的 http 刷新 如果间隔太快 它会锁定 UI 上的按钮 使其无法工作 按钮没有记录点击 似乎是一个计时问题 如果我增加时间并因此错过了 get 调用 则按钮可以工作 但数据会延
  • RxJS - 我需要取消订阅吗

    如果我有这样的事情 class MyComponent constructor this interval Observbale interval 1000 const c new MyComponent const subscriptio
  • Ionic 2 http.get() 问题

    我试着做一个http get 用这两个方法调用 First getResults return this http get http localhost api php toPromise then data gt data json 显示

随机推荐

  • 片段已添加,对话框片段?

    我有一个显示良好的对话框片段 但有时当我尝试显示它时 我不断收到IllegalStateException 下面是日志猫 java lang IllegalStateException Fragment already added Sele
  • 如何阻止 PHP sleep() 影响我的整个 PHP 代码?

    所以 在我的街机上 howlingdoggames com 我有一个积分系统 每次您访问正在进行游戏的页面时 都会给您一个积分 为了减少滥用 我想进行某种延迟 因此仅在 45 秒后授予 这是我尝试过的 if SESSION lastgame
  • 当没有这样的条件调用时,useEffect Hook 条件调用的 React 错误

    React 正在抱怨下面的代码 说它useEffect有条件地被调用 import React useEffect from react import ReactDOM from react dom function App const d
  • AWS 快照和 AMI 之间的区别

    所以我很难弄清楚这两者之间的具体区别是什么 据我了解 快照只是磁盘驱动器的备份 而 AMI 是整个系统 或者我应该说的实例 的备份 但整个系统在技术上不是完全位于磁盘驱动器上吗 如果是这样的话 那么没有明显的区别 我错过了一些东西吗 有两种
  • 获取 AWS CodeBuild 的 GitHub git 分支

    我将 AWS CodeBuild 设置为从 GitHub 自动构建 其他 CI 服务为分支提供了环境变量 但我找不到适用于 AWS CodeBuild 的环境变量 有一个CODEBUILD SOURCE VERSION设置为pr 7 whe
  • Bash 不会自动完成文件(Tab)

    bash 中的自动完成功能 使用 Tab 适用于文件夹 但是not与文件 我运行的是 Ubuntu 13 10 我还没碰过我的 bashrc file 底部的部分是这样的 bashrc文件看起来 与bash 完成安装和更新的部分 enabl
  • Javascript深度复制对象[重复]

    这个问题在这里已经有答案了 可能的重复 克隆 JavaScript 对象最有效的方法是什么 https stackoverflow com questions 122102 what is the most efficient way to
  • 在 Qt 中显示图像以适合标签大小

    我已经尝试了几种在表单上显示图像的方法 但没有一个能按照我想要的方式工作 我读过很多地方 最简单的方法是创建标签并使用它来显示图像 我有一个标签 其大小由布局指定 但是如果我使用像素图将图像加载到其中 则标签的大小将调整为图像的大小 如果我
  • 如何使用 Boost 库智能指针管理对象生命周期?

    有一个场景我需要使用shared ptr和weak ptr智能指针来解决 两个线程 线程 1 和 2 正在使用名为 A 的共享对象 每个线程都有对该对象的引用 线程 1 决定删除对象 A 但同时线程 2 可能正在使用它 如果我使用share
  • SignalR 连续消息传递

    我有一个网络项目 需要从外部肥皂服务更新网页上的统计信息 日志 我决定采用的方法是使用 signalR 通过使用执行服务方法并将结果返回给所有连接的客户端的代码 该代码将连续执行 在服务调用之间有一定的延迟 我无法将所有部分放在一起 可能是
  • 为什么 Visual Studio Code Git 显示驱动器上的所有更改?

    我在 Macbook 上使用 Visual Studio Code 1 6 0 我发现 VS Code 的 Git 列出了大量更改 甚至是那些不在我的工作文件夹中的更改 当我将鼠标悬停在这些上时 我会得到一个工具提示 该文件位于当前工作区之
  • 按顺序拆分 Parallel.Foreach 循环上的负载

    我需要处理列表中的一百万个元素 将它们粗暴地扔进并行 ForEach只会让CPU饱和 相反 我将元素主列表分成几部分 并将子列表放入并行循环中 List
  • 我可以在 SSRS 中跨数据源“加入”吗?

    我有两个数据源 一个 Oracle 和一个 Sql Server 由于我之前的情况 就像我发现它时的情况一样 Oracle 数据库中的某些列包含来自 Sql Server 数据库中的查找表的 PK 我正在尝试创建一个 Sql Server
  • 如何在Notepad++中删除当前行并添加新行?

    如何在Notepad 中删除当前行并添加新行 这两个操作很常见 但我找不到任何关键设置如何在 Notepad 中执行它们 任何插件都可以完成这项工作吗 Ctrl L cuts the current line and Ctrl Shift
  • 我可以 gzip 压缩所有 html 内容(页面)吗

    我试图找出定义哪些页面应该进行 gzip 压缩以及何时发送纯 html 内容是否有任何原则 如果你们可以分享您在 gzip 压缩项目的一部分时所做的决定 那将会很有帮助 一个好主意是进行基准测试 对比数据下降的速度有多快 压缩得有多好 如果
  • MIPS:求 5 个整数的平均值

    客观的 根据用户输入 使用五个寄存器查找平均值 Example 1 3 2 9 4 Output 3 输出是 3 因为 3 8 是小数 我希望它是整数 我的目标是不使用数组 但我在添加所有 5 个寄存器时遇到问题 data prompt1
  • 多索引数据帧删除每组最大值的行

    我有一个像这样的多索引数据框 PID Fid x y A 1 2 3 2 6 1 3 4 6 B 1 3 5 2 2 4 3 5 7 我想删除每个患者 PID 具有最高 x 值的行 我需要获取一个包含剩余行和所有列的新数据框 以继续对这些数
  • 使用 Swift 将自定义“数字”图像添加到 SKLabelNode 作为 SpriteKit 中的分数

    我基本上想在 Singles 中添加自定义字体编号 带有图像 并使用 SpriteKit 在我的游戏中添加它们作为我的分数 这是字体图像样式 它们是从 0 到 9 的数字 一段时间以来我一直在试图解决这个问题 我不确定您是否可以将其添加到
  • 如何为 fllot 中的条形图赋予纯色

    我需要为条形图提供纯色 我已关注此链接条形图示例 http www saltycrane com blog 2010 03 jquery flot stacked bar chart example 但我想要提供纯色 而且我还需要自己改变颜
  • 如何获取第一次发生的事件,然后抑制事件 2 秒(RxJS)

    我认为 RxJS 应该完全适合抑制重复按钮点击 2 秒 然而 我在实施过程中遇到了困难 var button myButton button button toObservable click Throttle 2000 Wouldn t