Calls the function up to maxAttempts times. On each failure, waits baseDelayMs * multiplier^n ms with 25% random jitter, capped at maxDelayMs. Throws the last exception once all attempts are exhausted.

PHP Code Editor

<?php
/**
* Retry a callable with exponential backoff.
*
* @param callable $fn The operation to retry
* @param int $maxAttempts Maximum number of attempts
* @param int $baseDelayMs Initial delay in milliseconds
* @param float $multiplier Backoff multiplier (2.0 = double each time)
* @param int $maxDelayMs Cap on delay
* @throws Throwable Last exception if all attempts fail
*/
function retry(
callable $fn,
int $maxAttempts = 3,
int $baseDelayMs = 100,
float $multiplier = 2.0,
int $maxDelayMs = 5000,
): mixed {
$attempt = 0;
$delay = $baseDelayMs;
while (true) {
$attempt++;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PHP Version

Execution Result

Ready to execute

Click the "Run Script" button to see the output here