Function: orElse()

Chains the next computation using the error value of a Result or ResultAsync. If the original result is a Success, it is returned unchanged. Otherwise, the provided function is called, and its result is returned as-is.

Type Param

The input Result or ResultAsync.

Type Param

The result type returned by fn.

Examples

import { 
import Result
Result
} from '@praha/byethrow';
const
const result: Result.Result<0 | 42, never>
result
=
import Result
Result
.
const pipe: <Result.Result<42, never>, Result.Result<0 | 42, never>>(a: Result.Result<42, never>, ab: (a: Result.Result<42, never>) => Result.Result<0 | 42, never>) => Result.Result<0 | 42, never> (+25 overloads)
pipe
(
import Result
Result
.
const succeed: <42>(value: 42) => Result.Result<42, never> (+1 overload)
succeed
(42),
import Result
Result
.
const orElse: <Result.Result<42, never>, Result.Result<0, never>>(fn: (a: never) => Result.Result<0, never>) => (result: Result.Result<42, never>) => Result.Result<0 | 42, never> (+1 overload)
orElse
((
error: never
error
) =>
import Result
Result
.
const succeed: <0>(value: 0) => Result.Result<0, never> (+1 overload)
succeed
(0)),
); // { type: 'Success', value: 42 }
import { 
import Result
Result
} from '@praha/byethrow';
const
const result: Result.Result<"default value", never>
result
=
import Result
Result
.
const pipe: <Result.Result<never, "original error">, Result.Result<"default value", never>>(a: Result.Result<never, "original error">, ab: (a: Result.Result<never, "original error">) => Result.Result<"default value", never>) => Result.Result<"default value", never> (+25 overloads)
pipe
(
import Result
Result
.
const fail: <"original error">(error: "original error") => Result.Result<never, "original error"> (+1 overload)
fail
('original error'),
import Result
Result
.
const orElse: <Result.Result<never, "original error">, Result.Result<"default value", never>>(fn: (a: "original error") => Result.Result<"default value", never>) => (result: Result.Result<never, "original error">) => Result.Result<"default value", never> (+1 overload)
orElse
((
error: "original error"
error
) =>
import Result
Result
.
const succeed: <"default value">(value: "default value") => Result.Result<"default value", never> (+1 overload)
succeed
('default value')),
); // result: { type: 'Success', value: 'default value' }
import { 
import Result
Result
} from '@praha/byethrow';
const
const result: Result.Result<never, string>
result
=
import Result
Result
.
const pipe: <Result.Result<never, "original error">, Result.Result<never, string>>(a: Result.Result<never, "original error">, ab: (a: Result.Result<never, "original error">) => Result.Result<never, string>) => Result.Result<never, string> (+25 overloads)
pipe
(
import Result
Result
.
const fail: <"original error">(error: "original error") => Result.Result<never, "original error"> (+1 overload)
fail
('original error'),
import Result
Result
.
const orElse: <Result.Result<never, "original error">, Result.Result<never, string>>(fn: (a: "original error") => Result.Result<never, string>) => (result: Result.Result<never, "original error">) => Result.Result<never, string> (+1 overload)
orElse
((
error: "original error"
error
) =>
import Result
Result
.
const fail: <string>(error: string) => Result.Result<never, string> (+1 overload)
fail
('new error: ' +
error: "original error"
error
)),
); // result: { type: 'Failure', error: 'new error: original error' }

See

pipe - It is recommended to use this function with the pipe function for better readability and composability.

Call Signature

orElse<R1, R2>(fn): (result) => ResultFor<R1 | R2, InferSuccess<R1> | InferSuccess<R2>, InferFailure<R2>>

Type Parameters

R1

R1 extends ResultMaybeAsync<any, any>

R2

R2 extends ResultMaybeAsync<any, any>

Parameters

fn

(a) => R2

Returns

(result): ResultFor<R1 | R2, InferSuccess<R1> | InferSuccess<R2>, InferFailure<R2>>

Parameters

result

R1

Returns

ResultFor<R1 | R2, InferSuccess<R1> | InferSuccess<R2>, InferFailure<R2>>

Call Signature

orElse<F>(fn): <R1>(result) => ResultFor<R1 | ReturnType<F>, InferSuccess<R1> | InferSuccess<F>, InferFailure<F>>

Type Parameters

F

F extends (a) => ResultMaybeAsync<any, any>

Parameters

fn

F

Returns

<R1>(result): ResultFor<R1 | ReturnType<F>, InferSuccess<R1> | InferSuccess<F>, InferFailure<F>>

Type Parameters

R1

R1 extends ResultMaybeAsync<any, Parameters<F>[0]>

Parameters

result

R1

Returns

ResultFor<R1 | ReturnType<F>, InferSuccess<R1> | InferSuccess<F>, InferFailure<F>>