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());