traverseAsync
Option.traverseAsync
Namespace: FsToolkit.ErrorHandling
Function Signature:
('a -> Async<'b>) -> 'a option -> Async<'b option>
Note that traverse
is the same as map >> sequence
. See also Option.sequenceAsync.
See also Scott Wlaschin's Understanding traverse and sequence.
Examples
Example 1
Let's assume we have a type Customer
:
type Customer = {
Id : int
Email : string
}
And we have a function called getCustomerByEmail
that retrieves a Customer
by email address asynchronously from some external source -- a database, a web service, etc:
// string -> Async<Customer>
let getCustomerByEmail email : Async<Customer> = async {
return { Id = 1; Email = "test@test.com" } // return a constant for simplicity
}
If we have a value of type string option
and want to call the getCustomerByEmail
function, we can achieve it using the traverseAsync
function as below:
Some "test@test.com" |> Option.traverseAsync getCustomerByEmail
// async { return Some { Id = 1; Email = "test@test.com" } }
None |> Option.traverseAsync getCustomerByEmail
// async { return None }
Last updated