Метод catchError
Метод catchError класса Future позволяет перехватить
и обработать ошибку, которая возникла при выполнении асинхронной
операции. В первый параметр мы передаем функцию-обработчик,
которая принимает объект ошибки. Вторым необязательным параметром
можно передать функцию test, которая проверяет, нужно ли
обрабатывать данную ошибку. Метод возвращает новый Future,
что позволяет строить цепочки вызовов.
Синтаксис
future.catchError(onError, [test])
Пример
Давайте создадим Future, который завершается ошибкой,
и перехватим ее с помощью метода catchError:
void main()
{
Future<int> future = Future<int>.error('Something went wrong');
future.catchError((Object error) {
print('Caught error: $error');
return 0;
});
}
Результат выполнения кода:
"Caught error: Something went wrong"
Пример
Давайте создадим Future, который завершается ошибкой,
и обработаем ее, вернув новое значение:
void main()
{
Future<int> future = Future<int>.error('Error occurred');
future.catchError((Object error) {
print('Handled: $error');
return 42;
}).then((int value) {
print('Value: $value');
});
}
Результат выполнения кода:
"Handled: Error occurred"
"Value: 42"
Пример
Давайте используем второй параметр test, чтобы обработать
только определенные типы ошибок:
void main()
{
Future<int> future = Future<int>.error('Critical error');
future.catchError(
(Object error) {
print('Caught: $error');
return 0;
},
test: (Object error) => error.toString().contains('Critical')
);
}
Результат выполнения кода:
"Caught: Critical error"
Смотрите также
-
класс
Future,
который представляет результат асинхронной операции -
метод
then,
который обрабатывает успешное завершение Future -
метод
whenComplete,
который выполняется при завершении Future в любом случае -
метод
error,
который создает Future с ошибкой