You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用repeat的delay选项替代已弃用的repeatWhen操作符?

RxJS中用repeat替代repeatWhen的正确方式

在测试、重构客户项目以适配RxJS未来版本时,遇到弃用提示:repeatWhen操作符将在v9或v10版本移除,需改用repeat的delay选项。原使用repeatWhen的代码如下:

import { of, fromEvent, repeatWhen } from 'rxjs';

const source = of('Repeat message');
const documentClick$ = fromEvent(document, 'click');

const result = source.pipe(repeatWhen(() => documentClick$));

result.subscribe(data => console.log(data))

想改写为使用repeat的形式,但不清楚如何将documentClick$事件流作为delay参数传入(原delay选项似乎仅接受数字),以下是正确的转换方式:

RxJS的repeat操作符的delay参数支持接收一个返回Observable的函数,通过这个函数可以精准控制重复触发的时机,完美替代repeatWhen的逻辑。

改写后的代码:

import { of, fromEvent, repeat } from 'rxjs';

const source = of('Repeat message');
const documentClick$ = fromEvent(document, 'click');

const result = source.pipe(
  repeat({
    delay: () => documentClick$
  })
);

result.subscribe(data => console.log(data))

核心说明:

  • repeat配置对象中的delay属性并非只能传数字,传入函数时,该函数会在源Observable每次完成后被调用,其返回的Observable发出第一个值时,就会触发源Observable的重复订阅。
  • 上述写法与原repeatWhen实现的逻辑完全一致:源发出值完成后,等待documentClick$的点击事件触发重复。

这种写法符合RxJS新版本规范,代码简洁优雅,可直接用于交付客户的项目。

内容的提问来源于stack exchange,提问作者Anders Bernard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:31:12