Namespace: FsToolkit.ErrorHandling
Returns the original result unchanged if it is Ok, otherwise returns the provided alternative result.
Async<Result<'ok, 'error2>>
-> Async<Result<'ok, 'error>>
-> Async<Result<'ok, 'error2>>AsyncResult.error "First"
|> AsyncResult.orElse (AsyncResult.ok "Second")
// evaluates to Ok "Second"When the input is already Ok, the alternative is ignored:
AsyncResult.ok "First"
|> AsyncResult.orElse (AsyncResult.error "Second")
// evaluates to Ok "First"Namespace: FsToolkit.ErrorHandling
Returns the original result unchanged if it is Ok, otherwise calls the given function with the error value and returns its result. The alternative function is not evaluated unless the input is Error.
('error -> Async<Result<'ok, 'error2>>)
-> Async<Result<'ok, 'error>>
-> Async<Result<'ok, 'error2>>AsyncResult.error "First"
|> AsyncResult.orElseWith (fun _ -> AsyncResult.error "Second")
// evaluates to Error "Second"Falling back to a secondary data source when the primary fails:
let getUser (id: UserId) : Async<Result<User, string>> =
fetchFromCache id
|> AsyncResult.orElseWith (fun _ -> fetchFromDatabase id)Using the error value to decide the fallback strategy:
let result =
fetchData ()
|> AsyncResult.orElseWith (fun err ->
if isRetryable err then retryFetch ()
else AsyncResult.error err)