Метод then
Метод then класса Future регистрирует
функцию обратного вызова, которая будет вызвана
после успешного завершения асинхронной операции.
В первый параметр мы передаем функцию, принимающую
результат выполнения Future. Во второй
необязательный параметр можно передать функцию
для обработки ошибки. Метод возвращает новый
Future, что позволяет строить цепочки
асинхронных вызовов.
Синтаксис
future.then(onValue, [onError])
Пример
Давайте создадим Future, который успешно
завершается числом, и обработаем результат
с помощью метода then:
void main()
{
Future<int> future = Future.value(5);
future.then((int value) {
print('Value: $value');
});
}
Результат выполнения кода:
"Value: 5"
Пример
Давайте построим цепочку из нескольких
вызовов then, где каждый следующий
обработчик получает результат предыдущего:
void main()
{
Future<int> future = Future.value(2);
future
.then((int value) {
return value * 3;
})
.then((int value) {
return value + 4;
})
.then((int value) {
print('Result: $value');
});
}
Результат выполнения кода:
"Result: 10"
Пример
Давайте обработаем ошибку с помощью второго
параметра метода then:
void main()
{
Future<int> future = Future.error('Something went wrong');
future.then(
(int value) {
print('Value: $value');
},
onError: (Object error) {
print('Error: $error');
}
);
}
Результат выполнения кода:
"Error: Something went wrong"
Пример
Давайте используем then для обработки
результата отложенного Future:
void main()
{
Future<String> future = Future.delayed(
Duration(seconds: 1),
() => 'abcde'
);
future.then((String value) {
print('Got: $value');
});
}
Результат выполнения кода:
"Got: abcde"
Смотрите также
-
класс
Future,
который представляет асинхронную операцию -
метод
catchError,
который обрабатывает ошибки Future -
метод
whenComplete,
который выполняется после завершения Future -
метод
delayed,
который создает Future с задержкой