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.19.6/dart-async/Stream/handleError.html

Spec-Zone.ru

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