Rx 中立即去抖

2023-12-22

我正在寻找一位运营商debounce一系列的事件,比如说用户的点击。输入和输出应该是这样的:

interval :      ->     <-            ->     <-
in       : 1--2--3-------4--5--5--6-7-8--------
out      : 1-------------4---------------------

这个想法就像下划线的反跳immediate option on http://underscorejs.org/#debounce http://underscorejs.org/#debounce。该运算符可以用任何支持反应式扩展的语言来呈现/实现

编辑:澄清间隔,假设 5 秒(两个箭头之间有 5 个空格):-> <-

Edit2:一个更容易理解的版本:我有一个用户,他反复单击一个按钮(1,2,3);我想抓住第一click(1) 忽略其余部分。过了一会儿,他累了,休息7秒(比两个箭头之间的5秒间隔长),然后继续再次点击按钮(4,5,6,7,8)我想抓住第一个click(4) 忽略其余部分。

如果他在第四个箭头后点击,我也想捕捉到该点击。

Edit3: Here is an image image which can be found at the original article https://css-tricks.com/debouncing-throttling-explained-examples/#article-header-id-1


Edit:根据澄清,RxJava 没有用于此类流程的运算符,但它可以由一组重要的其他运算符组成:

import java.util.concurrent.TimeUnit;

import rx.Observable;

public class DebounceFirst {

    public static void main(String[] args) {
        Observable.just(0, 100, 200, 1500, 1600, 1800, 2000, 10000)
        .flatMap(v -> Observable.timer(v, TimeUnit.MILLISECONDS).map(w -> v))
        .doOnNext(v -> System.out.println("T=" + v))
        .compose(debounceFirst(500, TimeUnit.MILLISECONDS))
        .toBlocking()
        .subscribe(v -> System.out.println("Debounced: " + v));
    }

    static <T> Observable.Transformer<T, T> debounceFirst(long timeout, TimeUnit unit) {
        return f -> 
            f.publish(g ->
                g.take(1)
                .concatWith(
                    g.switchMap(u -> Observable.timer(timeout, unit).map(w -> u))
                    .take(1)
                    .ignoreElements()
                )
                .repeatWhen(h -> h.takeUntil(g.ignoreElements()))
            );
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rx 中立即去抖 的相关文章

  • 使用 RxJS 将多个 ajax 请求转换为 Observables

    我正在努力解决某件事 我猜这意味着我误解了并且正在做一些愚蠢的事情 我有一个可观察对象 需要使用它来创建一些对象 将其发送到服务器进行处理 将服务器的结果与我发送的对象结合起来 然后将其转换为可观察对象 所以我想要做什么 我认为 就像是 v
  • HTTP 服务的反应式缓存

    我正在使用 RsJS 5 5 0 1 在 Angular 2 中进行缓存 它运行良好 缓存功能的核心是 const observable Observable defer gt actualFn do gt this console log
  • RxJava + 改造,获取列表并为每个项目添加额外信息

    我正在玩 RXJava 在 Android 中进行改造 我正在努力完成以下任务 我需要定期轮询一个给我 Observable gt 的调用 从这里我可以做到 一旦我得到这个列表 我想在每个交付中迭代并调用另一个方法来给我预计到达时间 所以只
  • 如何在不引入竞争条件的情况下等待 RX 主体的响应?

    我有一项服务允许调用者异步发送命令和接收响应 在真实的应用程序中 这些操作是相当断开的 某些操作将发送命令 并且响应将被独立处理 但是 在我的测试中 我需要能够发送命令 然后等待 第一个 响应 然后再继续测试 响应是使用 RX 发布的 我对
  • 当返回自定义对象列表时,RxJava 突出显示错误但编译

    我正在进行 RxJava 调用 我订阅的最终结果是预订列表 代码工作正常 但我得到了这个恼人的亮点 演员阵容在这里不起作用 因为我无法演员阵容List
  • 如何使用 Retrofit 和 RxJava/RxAndroid 处理响应错误?

    我无法弄清楚如何使用改造和 RxAndroid 处理响应错误 如果存在网络错误等 则会调用 onError 但我需要能够获取响应以检查是否存在身份验证错误 相反 我得到的是一个带有空字符串的令牌 但我找不到原因 解决这个问题的最佳方法是什么
  • 如何使用一个可观察量的状态来跳过另一个可观察量的值?

    通过一个简短的例子可以最好地解释这一点 假设这是我想要过滤的可观察源 Observable interval 1 TimeUnit SECONDS 我使用复选框来处理过滤器状态 当未选中该框时 我想跳过所有值 我使用 RxAndroid 来
  • RxJava 中的笛卡尔积

    是否有可能在rxjava中获得两个Observables的笛卡尔积 像这样的事情 A gt 1 2 3 B gt a b A x B gt 1 a 1 b 2 a 2 b 3 a 3 b 你想要的是 对于一个数字 产生与你有字母一样的一对
  • rxjs asapscheduler 的执行顺序

    考虑到我有以下代码 let Rx window rxjs const of queueScheduler asapScheduler asyncScheduler animationFrameScheduler Rx const obser
  • RxJava 中的 n 元笛卡尔积

    现在我持有一个Observable
  • 对于 Buffer 等运算符来说,打开和关闭边界的含义是什么?

    我不明白需要打开或关闭边界的 Buffer 运算符的重载 我指的重载是 public static IObservable
  • Angular 自定义错误处理程序未从 Promise 获取错误类型

    当从承诺中抛出每个错误时 我的自定义错误处理程序都会丢失其类型 import HttpErrorResponse from angular common http import ErrorHandler Injectable Injecto
  • 如何延迟forkJoin

    你会怎样拖延 forkJoin 在 rxjs 中 这是我已经拥有但想使用的delay https www learnrxjs io operators utility delay html运营商用那个 return forkJoin thi
  • 使用 Angular HTTP Observable 的轮询 API

    在我的组件 html 中 我使用 asyncPipe 来订阅此 http 服务 该服务将 json 响应对象映射到类实例数组 这一切都很好 但我希望 http 服务每隔几秒轮询一次 我已经尝试了很多东西 比如间隔 但目前 RXJS 似乎有点
  • Rxjava 中“背压”一词是什么意思?

    我是 RxJava 的初学者 我很好奇 背压 这是否意味着生产者在背后给消费者施压 或者这是否意味着消费者正在向生产者施加压力 反方向施压 RxJava 背压 当你有一个 observable 发射物品的速度太快 以至于消费者无法跟上流量
  • 将 React 值从子级传递给父级

    我正在努力解决一些可能非常简单的事情 我的父组件是一个搜索小部件 它需要使用在单独的抽屉组件中定义的过滤器 目前 用户可以输入搜索查询 该查询会调用 API 并且需要根据抽屉组件中的选择器来过滤结果 但是 我无法将父母和孩子联系起来以实现这
  • 为什么 Task.WhenAny 没有抛出预期的 TimeoutException?

    请注意以下简单代码 class Program static void Main var sw new Stopwatch sw Start try Task WhenAny RunAsync GetAwaiter GetResult ca
  • 了解 rxjs 中的背压 - 仅缓存 5 个等待上传的图像

    我正在开发一个节点项目 需要提交数千张图像进行处理 在将这些图像上传到处理服务器之前 需要调整它们的大小 因此我有一些类似的内容 imageList map image gt loadAndResizeImage merge 3 map i
  • Rx:用于从 Observable 流中获取第一个和最新值的运算符

    对于基于 Rx 的变更跟踪解决方案 我需要一个运算符 它可以为我提供可观察序列中的第一个和最新的项目 我将如何编写一个 Rx 运算符来生成以下弹珠图 注意 括号只是用来排列项目 我不知道如何最好地在文本中表示这一点 xs a b c d d
  • RxAndroid - 单击时重试可观察

    我在 Android 应用程序中使用 rxAndroid 和 rxKotlin 来异步处理网络请求 现在我想仅在单击 Snackbar 按钮后重试失败的网络请求 我现在的代码 val citiesService ApiFactory cit

随机推荐

  • PDF 文件是否包含 iref 流?

    我仍然在努力从 PDF 文件中读取数据 我使用 PDFsharp 如何在不使用 Open 方法的情况下检查文件是否包含 iref 流 如果文件包含iref 流 方法 Open 会引发异常 有一个已知的解决方法可以让您同时打开包含 iref
  • JUnit @Theory:有没有办法抛出有意义的异常?

    我最近尝试了 Junit Theory 测试风格 这是一种非常有效的测试方式 但是 我对测试失败时引发的异常不满意 例子 import static org junit Assert assertEquals import org juni
  • ASP.NET WEB API 服务器上存储的授权令牌信息在哪里?

    在用户注册后 在我的 Web Api 2 Identity 2 应用程序中 我在单个表中有一条记录 AspNetUsers 我使用以下 http 请求来获取令牌 POST https localhost 44304 Token HTTP 1
  • 为什么使用“{}”的 R 代码比使用“()”的 R 代码更快?

    为什么R代码带有 一般来说比那个更快 下面的例子 n 10000000 w1 numeric n w2 numeric n r rnorm n t1 Sys time for i in 1 n w1 i r i 2 1 1 t1 Sys t
  • 在 Vim 中,如何找出组合键的作用

    我不小心按下了一个快捷键 我知道vim做了一些事情但我不知道是什么 我怎样才能知道该快捷键的作用 有两个潜在的信息来源 首先 如果它是内置快捷方式 通常会在帮助文档中 例如 如果你这样做 help CTRL I 它将带您进入有关在跳转列表中
  • HTML Tidy 在 JavaScript 字符串文字中的脚本标记上失败

    我在 PHP 中使用 HTML Tidy 它产生了意外的结果 因为关闭打开的标签 我在 HTML Tidy 的在线版本上尝试过这个 http www dirty
  • 安装后使用 WiX/Burn 启动应用程序

    我知道 WiX MSI 中存在类似问题 但在使用创建的引导程序 EXE 文件中启动应用程序时遇到问题Burn http en wikipedia org wiki WiX Burn安装后 我的完整包如下 如果对场景有任何影响 引导程序将以被
  • 如何在手动表单提交中添加post参数?

    我想在经过一些复杂的检查后手动提交表格 由于检查涉及用户交互 因此整个检查过程不是同步完成的 这是场景 用户单击按钮 HTML
  • 如何配置curl仅显示百分比?

    是否有一个选项可以让curl命令仅显示shell的百分比输出而不是所有这些 例如 Total Received Xferd Average Speed Time Time Time Current Dload Upload Total Sp
  • 更改聚合物纸元素默认字体

    将 Polymer Paper Elements 默认字体从 Roboto 更改为自定义字体的最佳方法是什么 我用的是 paper font common base mixin 来定义我的字体 这适用于大多数地方 但不是全部 在像这样的地方
  • gnu ld/gdb:单独的调试文件。当有太多调试信息需要链接时如何生成调试文件?

    现在有gdb and binutils支持将调试信息与要调试的二进制文件分开 描述这一点的文档可以在以下位置找到 gdb 单独的调试文件 http sourceware org gdb onlinedocs gdb Separate Deb
  • konvajs 序列化包含图像的阶段

    我正在使用 Konvajs 创建一个自定义标签制作器 一切都运行良好 直到我尝试将阶段序列化为 JSON 用户通过三个步骤创建自定义标签 第一步 他们从我们的库中选择一个具有遮罩区域的模板图像 第二步允许他们上传个性化图像 该图像放置在第一
  • PHP - 如何将命名变量放入字符串中并在变量之前定义字符串

    我正在寻找 php 相当于pythons 操作员 https stackoverflow com a 2962966 1695680 PYTHON Example foo variable string baz characters new
  • node.js - 流文件而不临时保存它

    这是我的设置 我有一个客户端 文件从该客户端上传到node js服务器 serverA 我想从那里将 文件流式传输到另一台服务器 serverB without临时保存文件 在服务器 A 上 实现这一目标的最简单和最好的方法是什么 我可以将
  • 我可以在 PureComponent 中使用 shouldComponentUpdate

    我知道的功能shouldComponentUpdate也PureComponent 但我想知道是否可以将两者一起使用 假设我有很多道具 我想让它们在其中进行浅比较处理PureComponent 除了 1 个道具 需要巧妙地进行比较 那么是否
  • Java - thread.sleep 的替代品

    我需要将 while 循环暂停特定的毫秒数 我尝试过使用 Thread sleep duration 但它不准确 特别是在循环场景中 毫秒精度在我的程序中很重要 这是我不想返回检查条件直到expectedElapsedTime已经过去了 w
  • 无法使用 a2wsgi 让 FastAPI 与 CPanel 配合使用

    似乎很多人都遇到了同样的问题 但到目前为止 它被证明是无法解决的 我希望有人能解决这个问题 我尝试在 cPanel 上运行 FastAPI 并不断收到错误 UID 1293 19858 Child process with pid 2008
  • iOS13 通过滑动(屏幕边缘)弹出视图控制器不起作用

    有正常的UINavigationController与一些堆叠UIViewController按下后 我无法使用 屏幕边缘 滑动手势返回根视图控制器 没有自定义导航栏 没有自定义后退按钮 与使用 后退 滑动手势相关的内容是否发生了变化 我知
  • 为什么这里的外部

    我这里有一个jsfiddle https jsfiddle net Lh7qbye2 7 https jsfiddle net Lh7qbye2 7 这里还有一个测试网页 https shetline com test test01 htm
  • Rx 中立即去抖

    我正在寻找一位运营商debounce一系列的事件 比如说用户的点击 输入和输出应该是这样的 interval gt lt gt lt in 1 2 3 4 5 5 6 7 8 out 1 4 这个想法就像下划线的反跳immediate op