whenComplete抽象方法

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

注册一个函数,当这个Future完成时调用。

当这个Future无论以值还是以错误完成时,都会调用该action函数。

这是"finally"块的异步等价物。

此调用返回的future,f,将以与这个future相同的方式完成,除非在调用action或由action返回的Future中发生错误。如果调用action不返回future,其返回值将被忽略。

如果调用action抛出异常,则f将以抛出的错误完成。

如果调用action返回一个Futuref2,则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());