Files
alfred-be/alfred/utils/retry_util.go
2026-03-08 16:14:42 +05:30

38 lines
1.1 KiB
Go

package utils
import (
"alfred/pkg/log"
"errors"
"go.uber.org/zap"
"time"
)
func RetryFunctionWithResponseAndError(fn func() (interface{}, error), maxRetries int, initialDelay time.Duration) (interface{}, error) {
var response interface{}
var err error
for retry := 0; retry < maxRetries; retry++ {
if response, err = fn(); err == nil {
return response, nil // Operation succeeded.
}
log.Error("Error while retrying", zap.Error(err))
// Calculate the delay using exponential backoff.
delay := initialDelay * (1 << uint(retry))
time.Sleep(delay)
}
return nil, errors.New("retry with error and response failed")
}
func RetryFunctionWithError(fn func() error, maxRetries int, initialDelay time.Duration) error {
var err error
for retry := 0; retry < maxRetries; retry++ {
if err = fn(); err == nil {
return nil // Operation succeeded.
}
log.Error("Error while retrying", zap.Error(err))
// Calculate the delay using exponential backoff.
delay := initialDelay * (1 << uint(retry))
time.Sleep(delay)
}
return errors.New("retry with error failed")
}