我正在探索DART中的Futures,我对Future提供的这两种方法(.then().whenCompleted())感到困惑.它们之间的主要区别是什么?

假设我想读一本书.txt使用.readAsString(),我会这样做:

void main(){
  File file = new File('text.txt');
  Future content = file.readAsString();
  content.then((data) {
    print(content);
  });  
}

所以.then()就像一个回调函数,一旦future 完成,它就会触发一个函数.

但是我看到也有.whenComplete()个也可以在Future完成后触发函数.大概是这样的:

void main(){
  File file = new File('text.txt');
  Future content = file.readAsString();
  content.whenComplete(() {
    print("Completed");
  });
}

我在这里看到的区别是,.then()可以访问返回的数据!

推荐答案

.whenComplete将在Future完成时触发函数,无论是否有错误,相反,.then将在Future完成后无错误地触发函数.

引用自.whenComplete API DOC

这是"finally"块的异步类似功能.

Dart相关问答推荐

单元测试广播流类

具有级联省道的三元算子的奇异行为

对字母数字字符串数组进行排序

将数据库提供程序导入另一个文件提供程序 dart

如何扩展 Dart 套接字 BroadcastStream 缓冲区大小为 1024 字节?

将 Stream> 转换为 Stream

如何在flutter中管理switch小部件的原生外观

无法在 IOS 上使用 firebase 运行Flutter应用程序

从 Future 实例中获取值

在Flutter中实现像Chanel app一样的自定义滚动?

dart 中 call() 的实现是什么?

在小部件之间画一条线

Flutter - 为什么滑块不会在 AlertDialog 中更新?

Flutter-创建一个倒计时(countdown)小部件

dart- 四舍五入

使用 Dart 计算字符串中字母的数量

在dart中使用动态(可变)字符串作为正则表达式模式

如何平移和zoom 图像?

如何在 Dart 中比较两个对象以查看它们是否是同一个实例?

Dart 会支持使用现有的 JavaScript 库吗?