debounce<T> static method

LxWorker<T> debounce<T>(
  1. LxReactive<T> source,
  2. Duration duration,
  3. void callback(
    1. T value
    ), {
  4. dynamic onProcessingError(
    1. Object error,
    2. StackTrace stackTrace
    )?,
})

Triggers callback after duration has passed without new source updates.

Implementation

static LxWorker<T> debounce<T>(
  LxReactive<T> source,
  Duration duration,
  void Function(T value) callback, {
  Function(Object error, StackTrace stackTrace)? onProcessingError,
}) {
  Timer? timer;
  return _LxManagedWorker<T>(
    source,
    (value) {
      timer?.cancel();
      timer = Timer(duration, () {
        try {
          callback(value);
        } catch (e, st) {
          if (onProcessingError != null) {
            onProcessingError(e, st);
          } else {
            Zone.current.handleUncaughtError(e, st);
          }
        }
      });
    },
    onProcessingError: onProcessingError,
    onClose: () {
      timer?.cancel();
      timer = null;
    },
  );
}