• throttle
    • 签名: throttle(durationSelector: function(value): Observable | Promise): Observable
  • 仅当由提供的函数所确定的持续时间已经过去时才发出值。
    • 示例
      • 示例 1: 节流2秒,时间由第2个 observable 决定
      • 示例 2: 使用 promise 进行节流
  • 其他资源

    throttle

    签名: throttle(durationSelector: function(value): Observable | Promise): Observable

    仅当由提供的函数所确定的持续时间已经过去时才发出值。

    throttle - 图1

    示例

    示例 1: 节流2秒,时间由第2个 observable 决定

    ( jsBin |
    jsFiddle )

    1. import { interval } from 'rxjs/observable/interval';
    2. import { throttle } from 'rxjs/operators';
    3. // 每1秒发出值
    4. const source = interval(1000);
    5. // 节流2秒后才发出最新值
    6. const example = source.pipe(throttle(val => interval(2000)));
    7. // 输出: 0...3...6...9
    8. const subscribe = example.subscribe(val => console.log(val));
    示例 2: 使用 promise 进行节流

    ( jsBin |
    jsFiddle )

    1. import { interval } from 'rxjs/observable/interval';
    2. import { throttle, map } from 'rxjs/operators';
    3. // 每1秒发出值
    4. const source = interval(1000);
    5. // 基于 source 自增地增加解析的时间
    6. const promise = val =>
    7. new Promise(resolve =>
    8. setTimeout(() => resolve(`Resolved: ${val}`), val * 100)
    9. );
    10. // 当 promise 解析时发出 source 的项
    11. const example = source
    12. .pipe(
    13. throttle(promise),
    14. map(val => `Throttled off Promise: ${val}`);
    15. );
    16. const subscribe = example.subscribe(val => console.log(val));

    其他资源

    • throttle :newspaper: - 官方文档
    • 过滤操作符: throttle 和 throttleTime :video_camera: :dollar: - André Staltz

    :file_folder: 源码: https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/throttle.ts