Spec-Zone.ru › Dart 2

dart:async

Метод handleError

Stream<T> handleError(
  1. Function onError,
  2. {bool test(
    1. dynamic error
    )?}
)

Создает обёртку Stream, которая перехватывает некоторые ошибки из этого потока.

Если этот поток отправляет ошибку, которая соответствует test, то она перехватывается функцией onError.

Обратный вызов onError должен быть типа void Function(Object error) или void Function(Object error, StackTrace). Тип функции определяет, вызывается ли onError с аргументом стека вызовов. Аргумент стека вызовов может быть StackTrace.empty, если этот поток получил ошибку без стека вызовов.

Асинхронная ошибка error соответствует функции проверки, если test(error) возвращает true. Если test опущена, каждая ошибка считается соответствующей.

Если ошибка перехватывается, функция onError может решить, что с ней делать. Она может бросить исключение, если хочет поднять новую (или ту же) ошибку, или просто вернуть значение, чтобы этот поток забыл об ошибке. Если полученное значение error снова бросается функцией onError, это ведет себя как rethrow, и оно передаётся вместе со своим исходным стеком вызовов, а не со стеком вызовов throw внутри onError.

Если вам нужно преобразовать ошибку в событие данных, используйте более общий метод Stream.transform для обработки события, записав событие данных в выходной канал.

Возвращаемый поток является потоком широковещательной передачи, если таковым является этот поток. Если за потоком широковещательной передачи подпишутся более чем один раз, каждая подписка индивидуально выполнит test и обработает ошибку.

Пример:

Stream.periodic(const Duration(seconds: 1), (count) {
  if (count == 2) {
    throw Exception('Exceptional event');
  }
  return count;
}).take(4).handleError(print).forEach(print);

// Outputs:
// 0
// 1
// Exception: Exceptional event
// 3
// 4

Реализация

Stream<T> handleError(Function onError, {bool test(error)?}) {
  final void Function(Object, StackTrace) callback;
  if (onError is void Function(Object, StackTrace)) {
    callback = onError;
  } else if (onError is void Function(Object)) {
    callback = (Object error, StackTrace _) {
      onError(error);
    };
  } else {
    throw ArgumentError.value(
        onError,
        "onError",
        "Error handler must accept one Object or one Object and a StackTrace"
            " as arguments.");
  }
  return new _HandleErrorStream<T>(this, callback, test);
}

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-async/Stream/handleError.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API