当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart FutureExtensions.onError用法及代码示例


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 。如果 EObject ,则可能会捕获所有错误,仅取决于提供的 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.dev大神的英文原创作品 onError<E extends Object> method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。