Class: AsyncResult<T, F>
Type parameters
| Name | Type |
|---|---|
T | T |
F | extends Error = Error |
Implements
PromiseLike<Result<T,F>>
Methods
flatMap
▸ flatMap<X, XF>(mapSuccess, mapError?): UnwrappedAsyncResult<X, F | XF>
Type parameters
| Name | Type |
|---|---|
X | X |
XF | extends Error = F |
Parameters
| Name | Type |
|---|---|
mapSuccess | (success: T) => Result<X, Error> |
mapError? | (error: F) => Result<XF, Error> |
Returns
UnwrappedAsyncResult<X, F | XF>
Defined in
packages/result/src/AsyncResult.ts:237
flatMapAsync
▸ flatMapAsync<X, XF>(mapSuccess, mapError?): UnwrappedAsyncResult<X, F | XF>
Type parameters
| Name | Type |
|---|---|
X | X |
XF | extends Error = F |
Parameters
| Name | Type |
|---|---|
mapSuccess | (success: T) => AsyncResult<X, Error> |
mapError? | (error: F) => AsyncResult<XF, Error> |
Returns
UnwrappedAsyncResult<X, F | XF>
Defined in
packages/result/src/AsyncResult.ts:246
get
▸ get(): Promise<T>
Returns
Promise<T>
Defined in
packages/result/src/AsyncResult.ts:193
getEither
▸ getEither(): Promise<T | F>
Returns
Promise<T | F>
Defined in
packages/result/src/AsyncResult.ts:197
map
▸ map<X, Y>(mapSuccess, mapError?): AsyncResult<X, Y>
Type parameters
| Name | Type |
|---|---|
X | X |
Y | extends Error = F |
Parameters
| Name | Type |
|---|---|
mapSuccess | (success: T) => X |
mapError? | (error: F) => Y |
Returns
AsyncResult<X, Y>
Defined in
packages/result/src/AsyncResult.ts:219
mapAsync
▸ mapAsync<X, Y>(mapSuccess, mapError?): AsyncResult<X, Y>
Type parameters
| Name | Type |
|---|---|
X | X |
Y | extends Error = F |
Parameters
| Name | Type |
|---|---|
mapSuccess | (success: T) => Promise<X> |
mapError? | (error: F) => Promise<Y> |
Returns
AsyncResult<X, Y>
Defined in
packages/result/src/AsyncResult.ts:228
mapFailure
▸ mapFailure<X>(mapFailure): AsyncResult<T, X>
Type parameters
| Name | Type |
|---|---|
X | extends Error = F |
Parameters
| Name | Type |
|---|---|
mapFailure | (failed: F) => X |
Returns
AsyncResult<T, X>
Defined in
packages/result/src/AsyncResult.ts:255
tap
▸ tap(mapSuccess, mapError?): AsyncResult<T, F>
Parameters
| Name | Type |
|---|---|
mapSuccess | (success: T) => unknown |
mapError? | (error: F) => unknown |
Returns
AsyncResult<T, F>
Defined in
packages/result/src/AsyncResult.ts:201
tapAsync
▸ tapAsync(mapSuccess, mapError?): AsyncResult<T, F>
Parameters
| Name | Type |
|---|---|
mapSuccess | (success: T) => Promise<unknown> |
mapError? | (error: F) => Promise<unknown> |
Returns
AsyncResult<T, F>
Defined in
packages/result/src/AsyncResult.ts:210
then
▸ then<TResult1, TResult2>(onfulfilled?, _onrejected?): Promise<TResult1 | TResult2>
Adheres to the interface PromiseLike<Result<T, F>> which allows using
await and .then() to allow total interop with promises.
Type parameters
| Name | Type |
|---|---|
TResult1 | Result<T, F> |
TResult2 | never |
Parameters
| Name | Type |
|---|---|
onfulfilled? | null | (value: Result<T, F>) => TResult1 | PromiseLike<TResult1> |
_onrejected? | null | (reason: any) => TResult2 | PromiseLike<TResult2> |
Returns
Promise<TResult1 | TResult2>
Implementation of
PromiseLike.then
Defined in
packages/result/src/AsyncResult.ts:57
withTimeout
▸ withTimeout<E>(ms, error?): AsyncResult<T, F | E>
Returns a new AsyncResult that will fail if the original AsyncResult does not resolve within the given timeout.
Example
tsconst result = await AsyncResult.success(userId).withTimeout(1_000).flatMap(doSomethingWithUserId) // AsyncResult<Data, ResultTimeout>
Type parameters
| Name | Type |
|---|---|
E | extends Error = ResultTimeoutError |
Parameters
| Name | Type | Description |
|---|---|---|
ms | number | The timeout in milliseconds |
error? | E | The error to throw if the timeout is exceeded. Defaults to ResultTimeoutError |
Returns
AsyncResult<T, F | E>
Defined in
packages/result/src/AsyncResult.ts:164
fail
▸ Static fail<T, F>(error): AsyncResult<T, F>
Returns an AsyncResult that has failed. Useful for testing.
Example
tsconst maybeUser = await AsyncResult.fail<User>(new Error('User not found'))
Type parameters
| Name | Type |
|---|---|
T | unknown |
F | extends Error = Error |
Parameters
| Name | Type |
|---|---|
error | F |
Returns
AsyncResult<T, F>
Defined in
packages/result/src/AsyncResult.ts:81
fromPromise
▸ Static fromPromise<T, F>(promise): AsyncResult<T, F>
Returns an AsyncResult that will resolve to the given value or rejected error.
Example
tsconst maybeUser = await AsyncResult.of<User>(getUser(userId))
Type parameters
| Name | Type |
|---|---|
T | T |
F | extends Error = Error |
Parameters
| Name | Type |
|---|---|
promise | Promise<T> |
Returns
AsyncResult<T, F>
Defined in
packages/result/src/AsyncResult.ts:108
invoke
▸ Static invoke<FN>(fn, ...args): AsyncResult<ReturnType<FN>, Error>
Invoke a function that returns a promise and wrap the result in an AsyncResult.
If the function throws synchronously or asynchronously, the error will be wrapped in an AsyncResult.
Example
tsconst maybeUser = await AsyncResult.invoke(getUser, userId) // AsyncResult<User, Error>
Type parameters
| Name | Type |
|---|---|
FN | extends (...args: any[]) => Promise<any> |
Parameters
| Name | Type |
|---|---|
fn | FN |
...args | Parameters<FN> |
Returns
AsyncResult<ReturnType<FN>, Error>
Defined in
packages/result/src/AsyncResult.ts:46
success
▸ Static success<T, F>(value): AsyncResult<T, F>
Returns an AsyncResult that has succeeded. Useful for testing.
Example
tsconst maybeUser = await AsyncResult.success<User>({ id: 1, name: 'John' })
Type parameters
| Name | Type |
|---|---|
T | T |
F | extends Error = Error |
Parameters
| Name | Type |
|---|---|
value | T |
Returns
AsyncResult<T, F>
Defined in
packages/result/src/AsyncResult.ts:95
unwrapResult
▸ Static unwrapResult<R>(promiseOrResult): Awaited<R> extends Result<T, F> ? UnwrappedAsyncResult<T, F> : never
Unwraps results that have somehow been wrapped in promises or are wrapping promises internally promises internally
Example
Types that should resolve to AsyncResult<T, Error>:
typescripttype Unwrappable =| Promise<Result<Promise<T>, Error>>| Promise<Result<T, Promise<Error>>>| Promise<Result<Promise<T>, Promise<Error>>>| AsyncResult<T, Error>| Result<T, Error>
Type parameters
| Name |
|---|
R |
Parameters
| Name | Type |
|---|---|
promiseOrResult | R |
Returns
Awaited<R> extends Result<T, F> ? UnwrappedAsyncResult<T, F> : never
Defined in
packages/result/src/AsyncResult.ts:133
wrap
▸ Static wrap<FN>(fn): (...args: Parameters<FN>) => FN extends (...args: any[]) => Promise<RT> ? AsyncResult<RT, Error> : never
Wrap a function that returns a promise in an AsyncResult.
Example
tsconst safeGetUser = AsyncResult.wrap(getUser)const maybeUser = await safeGetUser(userId) // AsyncResult<User, Error>
Type parameters
| Name | Type |
|---|---|
FN | extends (...args: any[]) => any |
Parameters
| Name | Type |
|---|---|
fn | FN |
Returns
fn
▸ (...args): FN extends (...args: any[]) => Promise<RT> ? AsyncResult<RT, Error> : never
Parameters
| Name | Type |
|---|---|
...args | Parameters<FN> |
Returns
FN extends (...args: any[]) => Promise<RT> ? AsyncResult<RT, Error> : never