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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。