Timeout functionality for fp-ts async structures.
npm install fp-ts-timeout
- Node.js v.18+
- TypeScript v.4.5+
- withTaskEitherTimeout(number)
- withReaderTaskEitherTimeout(number)
- TimeoutError
- withTaskEitherRetry(options)
- withReaderTaskEitherRetry(options)
A higher-order function for setting a timeout on asynchronous operations.
import * as Either from 'fp-ts/Either';
import * as TaskEither from 'fp-ts/TaskEither';
import { withTaskEitherTimeout, isTimeoutError } from 'fp-ts-timeout';
pipe(
TaskEither.tryCatch(
() => {
// some async operation
}),
Either.toError
),
withTaskEitherTimeout(1000) // 1 second timeout
TaskEither.match(
(error) => {
if (isTimeoutError(error)) {
// handle timeout error
} else {
// handle other errors
}
},
(result) => {
// handle success
}
)
A higher-order function for setting a timeout on asynchronous operations.
import * as Either from 'fp-ts/Either';
import * as TaskEither from 'fp-ts/TaskEither';
import * as ReaderTaskEither from 'fp-ts/ReaderTaskEither';
import { withTaskEitherTimeout, isTimeoutError } from 'fp-ts-timeout';
pipe(
TaskEither.tryCatch(
() => {
// some async operation
}),
Either.toError
),
ReaderTaskEither.fromTaskEither,
withReaderTaskEitherTimeout(1000), // 1 second timeout
TaskEither.match(
(error) => {
if (isTimeoutError(error)) {
// handle timeout error
} else {
// handle other errors
}
},
(result) => {
// handle success
}
)
Custom error thrown when an asynchronous operation exceeds the defined timeout limit.
A higher-order function for retrying asynchronous operations, utilizing p-retry under the hood. Refer to the package documentation for available options and details.
import * as Either from 'fp-ts/Either';
import * as TaskEither from 'fp-ts/TaskEither';
import { withTaskEitherRetry } from 'fp-ts-timeout';
pipe(
TaskEither.tryCatch(
() => {
// some async operation
}),
Either.toError
),
withTaskEitherRetry({ retries: 2 }),
TaskEither.match(
(error) => {
// handle errors
},
(result) => {
// handle success
}
)
A higher-order function for retrying asynchronous operations, utilizing p-retry under the hood. Refer to the package documentation for available options and details.
import * as Either from 'fp-ts/Either';
import * as TaskEither from 'fp-ts/TaskEither';
import * as ReaderTaskEither from 'fp-ts/ReaderTaskEither';
import { withReaderTaskEitherRetry } from 'fp-ts-timeout';
pipe(
TaskEither.tryCatch(
() => {
// some async operation
}),
Either.toError
),
ReaderTaskEither.fromTaskEither,
withReaderTaskEitherRetry({ retries: 2 }),
TaskEither.match(
(error) => {
// handle errors
},
(result) => {
// handle success
}
)
Source code contributions are most welcome. Please open a PR, ensure the linter is satisfied and all tests pass.
Causaly is building the world's largest biomedical knowledge platform, using technologies such as TypeScript, React and Node.js. Find out more about our openings at https://apply.workable.com/causaly/.
MIT