send method
Implementation
@override
Future<AiHttpResponse> send(AiHttpRequest request) async {
Object? lastError;
for (var attempt = 1; attempt <= retryPolicy.maxAttempts; attempt++) {
try {
final response = await inner.send(request);
if (attempt < retryPolicy.maxAttempts &&
retryPolicy.shouldRetryResponse(response)) {
await Future.delayed(_delayForAttempt(attempt));
continue;
}
return response;
} catch (error) {
lastError = error;
if (attempt >= retryPolicy.maxAttempts ||
!retryPolicy.shouldRetryError(error)) {
rethrow;
}
await Future.delayed(_delayForAttempt(attempt));
}
}
throw AiHttpException(
'HTTP request failed after ${retryPolicy.maxAttempts} attempts',
cause: lastError,
);
}