RxJS中如何设置可观察对象单个值的最小发射等待时长?
RxJS 从 7.3.0 版本开始提供了内置的 minDelay 操作符,完全匹配你的需求。
基础用法
直接将操作符加入请求的管道中即可:
request.pipe( minDelay(2000) )
minDelay 的内部逻辑完全符合你描述的规则:
- 若上游 Observable(也就是你的HTTP请求)在指定的延迟时间内就返回了结果,会等待到指定时长结束后才向下游发射结果
- 若上游 Observable 耗时超过指定的延迟时间,上游返回结果后会立刻向下游发射,不会叠加额外延迟
如果你使用的 RxJS 版本低于 7.3.0,无法使用内置的 minDelay,你当前用的 forkJoin 搭配 timer 的实现逻辑是完全正确的,你可以把这段逻辑封装为自定义操作符复用:
import { Observable, forkJoin, timer } from 'rxjs'; import { map } from 'rxjs/operators'; function minDelay<T>(delayMs: number) { return (source$: Observable<T>) => forkJoin([source$, timer(delayMs)]).pipe( map(([result]) => result) ); }
封装完成后就可以和内置操作符一样使用,无需每次重复编写 forkJoin 逻辑。
内容的提问来源于stack exchange,提问作者maybesomename
相关产品推荐
相关产品推荐

