https://github.com/nixjs/backoff-typescript
A small library which handles decaying constant/linear/exponential backOff
https://github.com/nixjs/backoff-typescript
attempt backoff javascript polling retry retry-strategies typescript
Last synced: 3 months ago
JSON representation
A small library which handles decaying constant/linear/exponential backOff
- Host: GitHub
- URL: https://github.com/nixjs/backoff-typescript
- Owner: nixjs
- Created: 2022-10-28T04:19:26.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-10-28T04:40:40.000Z (over 2 years ago)
- Last Synced: 2025-03-05T17:51:09.424Z (4 months ago)
- Topics: attempt, backoff, javascript, polling, retry, retry-strategies, typescript
- Language: TypeScript
- Homepage:
- Size: 4.88 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# @nixjs23n6/backoff-typescript
A small library which handles decaying constant/linear/exponential backOff
## Quick Setup
### ConstantBackoff
The ConstantBackoff will make the websocket wait a constant time between each connection retry. To use the Constant Backoff with a wait-time of 1 second:
```typescript
const backoff = new ConstantBackoff(1000)
setTimeout(() => {
// todo something
}, backoff)
```### LinearBackoff
The LinearBackoff linearly increases the wait-time between connection-retries until an optional maximum is reached. To use the LinearBackoff to initially wait 0 seconds and increase the wait-time by 2 second with every retry until a maximum of 12 seconds is reached:
```typescript
const backoff = new LinearBackoff(0, 2000, 12000)
setTimeout(() => {
// todo something
}, backoff)
```### ExponentialBackoff
The ExponentialBackoff doubles the backoff with every retry until a maximum is reached. This is modelled after the binary exponential-backoff algorithm used in computer-networking. To use the ExponentialBackoff that will produce the series [100, 200, 400, 800, 1600, 3200, 6400]:
```typescript
const backoff = new ExponentialBackoff(100, 7)
setTimeout(() => {
// todo something
}, backoff)
```## Examples
### Redux-saga
```typescript
import { LinearBackOff, BaseBackOff } from '@nixjs23n6/backoff-typescript'function* pollPriceSaga(backOff: BaseBackOff) {
while (true) {
try {
const time = backOff.next()
if (time === 15000) {
backOff.reset()
}const result = yield call(FETCH_PRICE)
yield put(onFetchPriceSuccess(result))
if (time > 0) yield delay(time)
yield delay(time)
} catch (err) {
yield put(onFetchPriceFailure(err))
}
}
}function* watchPriceSaga() {
while (true) {
yield take(coingeckoSlice.onStartFetchPrice)const backOff = new LinearBackOff(0, 10000, 15000)
yield race({
task: call(pollPriceSaga, backOff),
cancel: take(coingeckoSlice.onStopFetchPrice)
})
}
}
```