send method

  1. @override
Future<AiHttpResponse> send(
  1. AiHttpRequest request
)
override

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,
  );
}