Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gcanti/retry-ts
Retry combinators for monadic actions that may fail
https://github.com/gcanti/retry-ts
fp-ts functional-programming typescript
Last synced: 20 days ago
JSON representation
Retry combinators for monadic actions that may fail
- Host: GitHub
- URL: https://github.com/gcanti/retry-ts
- Owner: gcanti
- License: mit
- Created: 2018-07-02T09:48:01.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-04-05T08:14:04.000Z (over 2 years ago)
- Last Synced: 2024-10-12T22:55:30.034Z (2 months ago)
- Topics: fp-ts, functional-programming, typescript
- Language: TypeScript
- Homepage: https://gcanti.github.io/retry-ts/
- Size: 354 KB
- Stars: 168
- Watchers: 8
- Forks: 8
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ccamel - gcanti/retry-ts - Retry combinators for monadic actions that may fail (TypeScript)
- awesome-fp-ts - gcanti/retry-ts - Retry combinators for monadic actions that may fail (Domain modeling in TypeScript by Benoit Ruiz)
README
TypeScript port of PureScript's [purescript-aff-retry](https://github.com/Unisay/purescript-aff-retry) package
which in turn is a porting of Haskell's [retry](https://github.com/Soostone/retry) package# Example
```ts
import { log } from 'fp-ts/Console'
import * as E from 'fp-ts/Either'
import { pipe } from 'fp-ts/function'
import * as O from 'fp-ts/Option'
import * as TE from 'fp-ts/TaskEither'
import { capDelay, exponentialBackoff, limitRetries, Monoid, RetryStatus } from 'retry-ts'
import { retrying } from 'retry-ts/Task'const policy = capDelay(2000, Monoid.concat(exponentialBackoff(200), limitRetries(5)))
const fakeAPI = TE.left('API errored out')
const logDelay = (status: RetryStatus) =>
TE.rightIO(
log(
pipe(
status.previousDelay,
O.map((delay) => `retrying in ${delay} milliseconds...`),
O.getOrElse(() => 'first attempt...')
)
)
)const result = retrying(policy, (status) => pipe(logDelay(status), TE.apSecond(fakeAPI)), E.isLeft)
result().then((e) => console.log(e))
/*
first attempt...
retrying in 200 milliseconds... <= exponentialBackoff
retrying in 400 milliseconds... <= exponentialBackoff
retrying in 800 milliseconds... <= exponentialBackoff
retrying in 1600 milliseconds... <= exponentialBackoff
retrying in 2000 milliseconds... <= exponentialBackoff + capDelay
left("API errored out") <= limitRetries
*/
```# Documentation
- [API Reference](https://gcanti.github.io/retry-ts)
# License
The MIT License (MIT)