intercept method

  1. @override
Future<HttpResponse> intercept(
  1. HttpRequest request,
  2. CancellationToken token,
  3. HttpRequestHandler next
)
override

Implementation

@override
Future<HttpResponse> intercept(HttpRequest request, CancellationToken token,
    HttpRequestHandler next) async {
  token.throwIfCanceled();
  final until = _openUntil;
  final probe = until != null;
  if (until != null && (_clock().isBefore(until) || _probing)) {
    throw CircuitOpenException(until);
  }
  if (probe) _probing = true;
  final generation = _generation;
  try {
    final response = await next(request, token);
    if (generation != _generation) return response;
    if (response.statusCode >= 500 || response.statusCode == 429) {
      _failure();
    } else {
      _failures = 0;
      _openUntil = null;
    }
    return response;
  } catch (error) {
    if (!token.isCanceled &&
        generation == _generation &&
        (error is NetworkException || error is RequestTimeoutException)) {
      _failure();
    }
    rethrow;
  } finally {
    if (probe) _probing = false;
  }
}