run method

Future<T> run(
  1. String key,
  2. AsyncRequest<T> request
)

Runs request at most once per minInterval for key.

Calls received before an operation starts are folded into that operation. Calls received while it is running are folded into one trailing operation.

Implementation

Future<T> run(String key, AsyncRequest<T> request) {
  final existing = _states[key];
  if (existing != null) {
    existing.request = request;
    if (existing.started) {
      existing.pending = true;
    }
    return existing.completer.future;
  }

  _pruneStartTimes();
  final state = _ThrottledRequestState<T>(request);
  _states[key] = state;
  unawaited(_drain(key, state));
  return state.completer.future;
}