當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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