Skip to content

A collection of helpful RxJS operators to deal with backoff strategies (like exponential backoff)

License

Notifications You must be signed in to change notification settings

sithwarrior/backoff-rxjs

 
 

Repository files navigation

backoff-rxjs

A collection of helpful RxJS operators to deal with backoff strategies (like exponential backoff) Angular-in-Depth article about this library is at https://indepth.dev/power-of-rxjs-when-using-exponential-backoff/

intervalBackoff

Basic interval backoff

intervalBackoff works similiarly to interval except that it doubles the delay between emissions every time.

name type attirbute description
config number | IntervalBackoffConfig required Can take number as initial interval or a config with initial interval, optional max Interval and optional backoff delay function (exponential by default)

interval is especially useful for periodic polls that are reset whenever user activity is detected:

fromEvent(document, 'mousemove').pipe(
  // There could be many mousemoves, we'd want to sample only
  // with certain frequency
  sampleTime(LOAD_INTERVAL_MS),

  // Start immediately
  startWith(null),

  // Resetting exponential interval
  switchMapTo(
    intervalBackoff({
      initialInterval: LOAD_INTERVAL_MS,
      maxInterval: MAX_INTERVAL_MS
    })
  )
);

retryBackoff

Retry Backoff Exponential Image

name type attirbute description
config number | RetryBackoffConfig required Can take number as initial interval or a config with initial interval, optional max Interval, optional max number of retry attempts, optional function to cancel reties and optional backoff delay function (exponential by default)
 this.service.callBackend().pipe(
   retryBackoff({
     initialInterval: 100,
     maxRetries: 12,
     // 👇 resets retries count and delays between them to init values
     resetOnSuccess: true
    })
 )

About

A collection of helpful RxJS operators to deal with backoff strategies (like exponential backoff)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 92.7%
  • JavaScript 7.3%