orAsync method
If this result is Ok, then returns it as is.
If this result is Err, then call result = await f().
If result of call f() is null, then returns Err.
If result of call f() is value, then return Ok(value).
If call of f() throws exception, then returns Err.
Implementation
Future<Result<T>> orAsync(Future<T> Function() f) async {
if (isOk) {
return this;
}
try {
var res = await f();
if (res == null) {
return Err<T>(StateError('Result of f() == null, where `f` is $f'));
}
return Ok(res);
} catch (e) {
return Err(StateError('Raised exception $e while called $f'));
}
}