dart:async
库中FutureExtensions.onError
方法的用法介绍如下。
用法:
Future<T> onError<E extends Object>(
FutureOr<T> handleError(
E error,
StackTrace stackTrace
),
{bool test(
E error
)?}
)
处理这个未来的错误。
捕获此 future 完成的类型为 E
的错误。如果提供了 test
,则仅捕获 E
类型的错误,其中 test
返回 true
。如果 E
是 Object ,则可能会捕获所有错误,仅取决于提供的 test
.toString()
如果错误被捕获,则返回的 future 以调用 handleError
的结果完成,并带有错误和堆栈跟踪。此结果必须是与此未来可能完成的相同类型的值。例如,如果这个未来不能用 null
完成,那么 handleError
也不能返回 null
。例子:
Future<T> retryOperation<T>(Future<T> operation(), T onFailure()) =>
operation().onError<RetryException>((e, s) {
if (e.canRetry) {
return retryOperation(operation, onFailure);
}
return onFailure();
});
如果handleError
抛出,则返回的future 以抛出的错误和堆栈跟踪完成,但如果它再次抛出same
错误对象,则将其视为"rethrow" 并保留原始堆栈跟踪。这可以用作跳过 test
中的错误的替代方法。例子:
// Unwraps an an exceptions cause, if it has one.
someFuture.onError<SomeException>((e, _) {
throw e.cause ?? e;
});
// vs.
someFuture.onError<SomeException>((e, _) {
throw e.cause!;
}, test: (e) => e.cause != null);
如果错误没有被捕获,则返回的未来以与这个未来相同的结果、值或错误完成。
此方法实际上是 Future.catchError 的更精确类型的版本。它可以轻松捕获特定的错误类型,并且需要正确键入的错误处理函数,而不仅仅是 Function 。因此,错误处理程序必须接受堆栈跟踪参数。
相关用法
- Dart Future用法及代码示例
- Dart Future.doWhile用法及代码示例
- Dart Future.any用法及代码示例
- Dart Future.value用法及代码示例
- Dart Future.wait用法及代码示例
- Dart Future.whenComplete用法及代码示例
- Dart Future.catchError用法及代码示例
- Dart Future.error用法及代码示例
- Dart Future.timeout用法及代码示例
- Dart Future.sync用法及代码示例
- Dart Future.delayed用法及代码示例
- Dart Function.apply用法及代码示例
- Dart FileList.first用法及代码示例
- Dart FileList.length用法及代码示例
- Dart File用法及代码示例
- Dart Finalizer.attach用法及代码示例
- Dart Float32List.view用法及代码示例
- Dart FileSystemEntity用法及代码示例
- Dart FileSystemEntity.resolveSymbolicLinks用法及代码示例
- Dart Finalizable用法及代码示例
- Dart File.renameSync用法及代码示例
- Dart Float32x4List.sublist用法及代码示例
- Dart Finalizer用法及代码示例
- Dart FileSystemEntity.resolveSymbolicLinksSync用法及代码示例
- Dart FileList.elementAt用法及代码示例
注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 onError<E extends Object> method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。