Spec-Zone.ru › Dart 2

dart:async

Метод whenComplete

Future<T> whenComplete(
  1. FutureOr<void> action( )
)

Регистрирует функцию, которая должна быть вызвана при завершении этого будущего.

Функция action вызывается при завершении этого будущего, независимо от того, завершилось ли оно со значением или с ошибкой.

Это асинхронный аналог блока «finally».

Возвращаемое будущее этого вызова, f, завершится так же, как и это будущее, если только не произойдёт ошибка в вызове action, или в возвращаемом Future вызовом action. Если вызов action не возвращает будущее, его возвращаемое значение игнорируется.

Если вызов 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.18.5/dart-async/Future/whenComplete.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API