当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart Future.whenComplete用法及代码示例


dart:async 库中Future.whenComplete 方法的用法介绍如下。

用法:

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

注册一个在这个未来完成时要调用的函数。

action 函数在这个未来完成时被调用,无论它是使用值还是错误完成。

这是"finally" 块的异步等效项。

此调用返回的未来 f 将以与此未来相同的方式完成,除非在 action 调用中或在 action 调用返回的 Future 中发生错误。如果对action 的调用未返回未来,则忽略其返回值。

如果对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.

相关用法


注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 whenComplete method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。