РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
470 of 723 menu

Оператор await

Оператор await используется внутри асинхронных функций, помеченных ключевым словом async. Он приостанавливает дальнейшее выполнение функции до тех пор, пока переданный ему объект Future не завершится, и возвращает результат этого Future. Если Future завершается успешно, await возвращает его значение. Если Future завершается с ошибкой, то ошибка выбрасывается в точке вызова await, и её можно перехватить с помощью try и catch.

Оператор await принимает один параметр - объект типа Future, результат которого нужно дождаться. Возвращаемое значение имеет тот же тип, что и результат этого Future.

Синтаксис

await future;

Пример

Давайте дождёмся завершения Future, который возвращает число, и выведем результат в консоль:

Future<int> getNumber() { return Future.value(5); } void main() async { int res = await getNumber(); print(res); }

Результат выполнения кода:

5

Пример

Давайте дождёмся завершения Future, который возвращает строку, и выведем её в консоль:

Future<String> getString() { return Future.value('abcde'); } void main() async { String res = await getString(); print(res); }

Результат выполнения кода:

"abcde"

Пример

Давайте дождёмся завершения Future, который возвращает список, и выведем его в консоль:

Future<List<int>> getList() { return Future.value([1, 2, 3, 4, 5]); } void main() async { List<int> res = await getList(); print(res); }

Результат выполнения кода:

[1, 2, 3, 4, 5]

Пример

Давайте обработаем ошибку, которую выбрасывает Future, с помощью конструкции try и catch:

Future<int> getError() { return Future.error('something went wrong'); } void main() async { try { int res = await getError(); print(res); } catch (e) { print(e); } }

Результат выполнения кода:

"something went wrong"

Пример

Давайте дождёмся завершения двух Future последовательно и сложим их результаты:

Future<int> getFirst() { return Future.value(1); } Future<int> getSecond() { return Future.value(2); } void main() async { int a = await getFirst(); int b = await getSecond(); int res = a + b; print(res); }

Результат выполнения кода:

3

Смотрите также

  • ключевое слово async,
    которое помечает асинхронную функцию
  • функция unawaited,
    которая игнорирует результат Future
  • функция scheduleMicrotask,
    которая добавляет задачу в очередь микротасок
  • оператор await,
    который ожидает результата Future
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить