intercept method
Future<HttpResponse>
intercept(
- HttpRequest request,
- CancellationToken token,
- 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;
}
}