前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter必备语言Dart教程04 - 异步,库

Flutter必备语言Dart教程04 - 异步,库

作者头像
前端知否
发布2020-03-23 17:59:38
1.6K0
发布2020-03-23 17:59:38
举报
文章被收录于专栏:前端知否前端知否

现在我们来看看如何在Dart中处理异步代码。使用Flutter时,会执行各种操作,例如网络调用和数据库访问,这些操作都应该异步执行。

在Dart中导入库

在Dart中使用异步,需要先导入异步库。

Future

异步库包含一个名为Future的类,Future是基于观察者模式的。如果您熟悉Javascript中的Rxjs或Promises,那么理解起来会很容易。

简单来说,Future定义的是“未来”发生的事情,也会在未来某个时刻返回一个值给我们。让我们看看如何使用Future。

Future是一个泛型类型,即 Future <T>,你必须指定返回值的类型。

我们定义了一个名为getAJoke的函数,它返回一个Future <String>。使用new关键字创建Future,Future构造函数接收一个返回值类型为T的函数参数。无论您在匿名函数中返回什么,都会被转化为Future。

在main中,我们调用getAJoke函数,该函数返回 Future<String>。我们通过调用then函数来订阅Future,这些函数注册了一个回调,当Future发出值时调用它。我们还注册了一个catchError来处理在执行Future期间发生的任何异常。在我们的示例中,我们没有发生任何异常。

以下是发生异常的示例。

在这个例子中,结果会立即返回。但在实际业务中,会使用Future来执行一些需要时间的代码,例如网络调用。我们可以使用 Future.delayed() 来模拟该行为。

现在,如果运行该程序,等待2秒钟后才出结果。让我们看另一个例子。

如您所见,我在调用函数后添加了一个print语句。在这种情况下,首先执行print语句,然后打印从Future返回的值。

但是,如果我们有一个Future,我们想先执行它,然后再执行print语句。这就需要使用 async/await 了。

Async/Await

首先在第3行的main函数的大括号之前添加async关键字。

然后我们在调用getAJoke函数之前添加await关键字,它的作用是等待从Future返回结果。后边的代码也会一直等待着被执行。

我们将代码包装在 try/catch 块中,来捕获任何异常(之前使用catchError回调来捕获)。要使用关键字await,就必须使用async关键字标记该函数,否则它将无法工作。

总结

这就是本教程系列的内容,更多语法细节和功能特性,强烈推荐阅读官方语言文档。接下来让我们一起探索Flutter开发之旅。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端知否 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在Dart中导入库
  • Future
  • Async/Await
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档