如何在 RxJS 中进行不同的节流

Joe*_*ing 5 throttling rxjs

我花了几天时间,但找不到在 RxJS 中进行“独特节流”的方法。

\n\n

假设每个事件在 4 个破折号内完成,“不同的节流阀”将执行如下:

\n\n

-\xe2\x91\xa0-\xe2\x91\xa1-\xe2\x91\xa0---------\xe2\x91\xa0-----|->

\n\n

[独特的油门]

\n\n

-\xe2\x91\xa0-\xe2\x91\xa1-------------\xe2\x91\xa0-----|->

\n\n

如何使用现有的 RxJS 运算符来构建“独特的节流阀”?

\n

car*_*ant 8

您可以使用groupBy按值分隔通知,然后应用throttleTime并使用 合并分组的可观察量mergeMap。像这样:

const { Subject } = rxjs;
const { groupBy, mergeMap, throttleTime } = rxjs.operators;

const source = new Subject();
const result = source.pipe(
  groupBy(value => value),
  mergeMap(grouped => grouped.pipe(
    throttleTime(400)
  ))
);

result.subscribe(value => console.log(value));

setTimeout(() => source.next(1), 100);
setTimeout(() => source.next(2), 300);
setTimeout(() => source.next(1), 400);
setTimeout(() => source.next(1), 900);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/rxjs@6/bundles/rxjs.umd.min.js"></script>
Run Code Online (Sandbox Code Playgroud)