Метод catchError абстрактного типа
Future<T> catchError(Обрабатывает ошибки, выданные этим Future.
Это асинхронный аналог блока «catch».
Возвращает новый Future, который будет завершён либо результатом этого будущего, либо результатом вызова onError обратного вызова.
Если это будущее завершается значением, возвращаемое будущее завершается тем же значением.
Если это будущее завершается ошибкой, то test сначала вызывается с ошибкой.
Если test возвращает false, исключение не обрабатывается этим catchError, и возвращаемое будущее завершается той же ошибкой и трассировкой стека, что и это будущее.
Если test возвращает true, onError вызывается с ошибкой и, возможно, трассировкой стека, и возвращаемое будущее завершается результатом этого вызова точно так же, как и для then's onError.
Если test опущено, по умолчанию используется функция, которая всегда возвращает true. Функция test не должна выбрасывать исключения, но если это произойдёт, то она обрабатывается так, как если бы исключение выбросила функция onError.
Обратите внимание, что futures не откладывают сообщение об ошибках до добавления слушателей. Если первый catchError (или then) вызов происходит после того, как это будущее завершилось с ошибкой, то ошибка сообщается как необработанная. См. описание в Future.
Пример:
foo
.catchError(..., test: (e) => e is ArgumentError)
.catchError(..., test: (e) => e is NoSuchMethodError)
.then((v) { ... });
Этот метод эквивалентен:
Future catchError(onError(error),
{bool test(error)}) {
this.then((v) => v, // Forward the value.
// But handle errors, if the [test] succeeds.
onError: (e, stackTrace) {
if (test == null || test(e)) {
if (onError is ZoneBinaryCallback) {
return onError(e, stackTrace);
}
return onError(e);
}
throw e;
});
}
Исходный код
// The `Function` below stands for one of two types:
// - (dynamic) -> FutureOr<T>
// - (dynamic, StackTrace) -> FutureOr<T>
// Given that there is a `test` function that is usually used to do an
// `isCheck` we should also expect functions that take a specific argument.
// Note: making `catchError` return a `Future<T>` in non-strong mode could be
// a breaking change.
Future<T> catchError(Function onError, {bool test(Object error)});
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-async/Future/catchError.html