首页 > 解决方案 > 可观察性以及如何控制结果速度

问题描述

我正在寻找一个可以帮助我调整从 observable 发出的结果的运算符,它看起来像这样:

[--A-BC--D-E----------------]
[--A----B----C----D----E----]

我尝试了 AuditTime() 但它不会重播间隔之间发出的结果,它会执行以下操作:

[--A-BC--D-E----------------]
[--A----C----E--------------]

谢谢你的帮助。

标签: rxjsobservablerxjs-pipeable-operators

解决方案


我认为这应该做你需要的:

const e1 =  cold('--A-BC--D-E----------------|');
const expected = '--A----B----C----D----E----|';

const source = e1.pipe(
  concatMap(val => of(false).pipe(
    delay(5, scheduler),
    takeWhile(Boolean),
    startWith(val),
  )),
);

expectObservable(source).toBe(expected);

这里的诀窍是我concatMap总是等到前一个 Observable 完成。内部 Observable 发出值,然后推迟自己的完成,从而concatMap强制两次发射之间的延迟。

查看现场演示:https ://stackblitz.com/edit/rxjs6-test-scheduler?file=index.ts


推荐阅读