流等于Observable.Throttle?

w.b*_*ian 5 dart dart-async

是否有一个与Observable.Throttle等效的Streams ?如果不是,是否有任何合理的优雅方法来达到类似效果?

Ale*_*uin 5

目前流上还没有这样的方法。已提交增强请求,您可以为问题 8492加注星标加注星标。

但是,您可以使用where方法来做到这一点。在下面的示例中,我定义了一个ThrottleFilter类来忽略给定持续时间内的事件:

import 'dart:async';

class ThrottleFilter<T> {
  DateTime lastEventDateTime = null;
  final Duration duration;

  ThrottleFilter(this.duration);

  bool call(T e) {
    final now = new DateTime.now();
    if (lastEventDateTime == null ||
        now.difference(lastEventDateTime) > duration) {
      lastEventDateTime = now;
      return true;
    }
    return false;
  }
}

main() {
  final sc = new StreamController<int>();
  final stream = sc.stream;

  // filter stream with ThrottleFilter
  stream.where(new ThrottleFilter<int>(const Duration(seconds: 10)).call)
    .listen(print);

  // send ints to stream every second, but ThrottleFilter will give only one int
  // every 10 sec.
  int i = 0;
  new Timer.repeating(const Duration(seconds:1), (t) { sc.add(i++); });
}
Run Code Online (Sandbox Code Playgroud)


Sea*_*gan 2

rate_limit提供流的限制和去抖动。