Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpAsEr 91 of 224 menu
◀ ▶

Ошибка асинхронного кода в Dart

Если Future завершается с ошибкой, она долетает до места, где стоит await. Блок try вокруг await позволяет обработать сбой и продолжить программу.

Если ошибку никто не ждет в try, выполнение программы обрывается, когда необработанный Future завершится с ошибкой.

Намеренный сбой в async-функции можно поймать по типу исключения:

Future<void> boom() async { throw StateError("boom"); } void main() async { try { await boom(); } on StateError catch (e) { print(e.message); } print("alive"); }

Сообщение исключения попадает в обработчик, затем печатается "alive". Поток main не обрывается на необработанном сбое.

Для данных с неверным форматом удобен FormatException:

Future<String> load() async { throw FormatException("bad line"); } void main() async { try { var text = await load(); print(text); } on FormatException catch (e) { print(e); } }

Тот же прием работает, когда сбой возникает при вычислении внутри async-функции:

Future<int> divide() async { var n = 0; return 5 ~/ n; } void main() async { try { var bad = await divide(); print(bad); } on IntegerDivisionByZeroException { print("fix input"); } }

В async-функции бросьте StateError с текстом "fail". Оберните await в try и напечатайте "handled" в обработчике.

Фоновая async-функция бросает ArgumentError с сообщением "bad id". Перехватите его вокруг await и выведите сообщение исключения.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить