whenComplete — абстрактный метод
-
FutureOr<
void> action( )
Регистрирует функцию, которая будет вызвана при завершении этого future.
Функция action вызывается при завершении этого future, независимо от того, завершится ли он с результатом или с ошибкой.
Это асинхронный аналог блока «finally».
Future, возвращённый этим вызовом, f, завершится так же, как и этот future, если только не произойдёт ошибка во время вызова action или в Future, возвращённом вызовом action. Если вызов action не возвращает future, его возвращаемое значение игнорируется.
Если вызов action выбрасывает исключение, то f завершается с выброшенной ошибкой.
Если вызов action возвращает Future, f2, завершение f откладывается до завершения f2. Если f2 завершается с ошибкой, она также станет результатом f. Значение f2 всегда игнорируется.
Этот метод эквивалентен:
Future<T> whenComplete(action()) {
return this.then((v) {
var f2 = action();
if (f2 is Future) return f2.then((_) => v);
return v;
}, onError: (e) {
var f2 = action();
if (f2 is Future) return f2.then((_) { throw e; });
throw e;
});
} Пример:
void main() async {
var value =
await waitTask().whenComplete(() => print('do something here'));
// Prints "do something here" after waitTask() completed.
print(value); // Prints "done"
}
Future<String> waitTask() {
Future.delayed(const Duration(seconds: 5));
return Future.value('done');
}
// Outputs: 'do some work here' after waitTask is completed. Реализация
Future<T> whenComplete(FutureOr<void> action());
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-async/Future/whenComplete.html