ErrorOr

返回一个 `ErrorOr` 结果,该结果包含一个值 `T` 或一个错误 `Object`。

特点

始终从异步函数返回一个 `ErrorOr` 值。让被调用的函数处理错误并返回一个 `ErrorOr`。调用者随后可以 `await` 结果,而无需 `try catch`。

`ErrorOr` 的一个子类包含预期的值 `T` 或一个错误 `Object`(通常是从 `try catch` 返回的 `Exception`)。

在内部,我们创建 `ErrorOr` 的私有子类,`_ValueWrapper` 或 `_ErrorWrapper`,其中包含预期的非空值。

`ErrorOr` 也可用于非异步函数——适用于 Flutter 和 Dart。

入门

让一个函数返回一个 `Future`,你将在调用函数中 `await` 它。

通过调用其工厂构造函数 `value` 或 `error` 来创建 `ErrorOr` 实例。

在调用 `error` 或 `value` 之前,检查 `hasError` 或 `hasValue`。如果任一被调用而没有进行适当的检查,则会抛出 `ErrorOrTypeError`。

用法

示例

Future<ErrorOr<LocationPermission>> checkPermission() async {
  try {
    return ErrorOr.value(await Geolocator.checkPermission());
  } catch (e) {
    return ErrorOr.error(e);
  }
}
ErrorOr<LocationPermission> errorOrPermission = await checkPermission();
if (errorOrPermission.hasError) {
  return errorOrPermission;
}
LocationPermission permission = errorOrPermission.value;

附加信息

我想保持这个包的最小化,但如果您有改进的建议,请在 GitHub 上联系我。

这个名字的灵感来自 SerenityOS 的 `ErrorOr` 类型。

成功/失败模式的灵感来自 result_type

GitHub

查看 Github