Оператор 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