Метод completeError
Метод completeError класса Completer завершает связанный
с Completer объект Future ошибкой. В первый параметр
мы передаем объект ошибки, во второй необязательный параметр -
трассировку стека StackTrace. После вызова этого метода
Future переходит в состояние ошибки, а все обработчики
catchError или then получают переданную ошибку.
Если Completer уже был завершен, повторный вызов
completeError приведет к ошибке состояния.
Синтаксис
completer.completeError(error, [stackTrace])
Пример
Давайте создадим Completer и завершим его ошибкой
с помощью метода completeError:
void main()
{
Completer<int> completer = Completer<int>();
completer.future.catchError((error)
{
print('Caught: $error');
return 0;
});
completer.completeError('Something went wrong');
}
Результат выполнения кода:
"Caught: Something went wrong"
Пример
Давайте передадим в completeError объект исключения
и трассировку стека:
void main()
{
Completer<String> completer = Completer<String>();
completer.future.catchError((error)
{
print('Error: ${error.message}');
return 'default';
});
try
{
throw FormatException('Invalid format');
}
catch (e, stackTrace)
{
completer.completeError(e, stackTrace);
}
}
Результат выполнения кода:
"Error: Invalid format"
Пример
Давайте проверим, что повторный вызов completeError
после завершения Completer вызывает ошибку состояния:
void main()
{
Completer<int> completer = Completer<int>();
completer.future.catchError((error)
{
print('Caught: $error');
return 0;
});
completer.completeError('First error');
try
{
completer.completeError('Second error');
}
catch (e)
{
print('StateError: ${e.runtimeType}');
}
}
Результат выполнения кода:
"Caught: First error"
"StateError: StateError"
Смотрите также
-
метод
complete,
который завершает Future значением -
класс
Completer,
который управляет завершением Future -
свойство
future,
которое возвращает связанный Future -
свойство
isCompleted,
которое проверяет завершение Completer