专栏首页前端知否Flutter必备语言Dart教程04 - 异步,库

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

现在我们来看看如何在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开发之旅。

本文分享自微信公众号 - 前端知否(qianduanzhifou),作者:QETHAN

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 移动端网页布局适配rem方案小结

    意思就是根据网页的根元素来设置字体大小,和em(font size of the element)的区别是,em是根据其父元素的字体大小来设置,而rem是根据网...

    前端知否
  • JSON.stringify方法的5个秘密功能

    JSON.stringify()方法将JavaScript对象或值转换为JSON字符串。

    前端知否
  • 创建自己的Code Snippets在VSCode中

    1. Go to Code → Preferences → User Snippets

    前端知否
  • Dart中的异步操作

    在前面的文章中我们很多次提到了Future这个东西,这个单词翻译过来的意思是‘未来’的意思。在flutter中它表示一个未来某些时候返回数据的一个对象。

    flyou
  • 零成本异步 I/O (下)

    这个非常出色的基于轮询的新方案——我们编写了这个模型,我归功于 Alex 和 Aaron Turon,是他们提出了这个想法——不是由 Future 来调度回调函...

    MikeLoveRust
  • Java多线程编程-(19)-多线程异步调用之Future模式

    在《Java多线程编程-(8)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier》 这一篇中,我们使用线程计数器的方式实现了...

    Java后端技术
  • # Event loop

    ​ dart是一种单线程语言,异步模型主要是通过事件轮询(event loop)来实现,另外也提供了更高级的Isolate来支持多线程,通常用于计算比较耗时的操...

    用户1175783
  • Flutter异步编程

    经常听说 future,或者从其他语言见到类似的说法如 javascript 的 Promise。那么究竟什么是 future?

    ChildhoodAndy
  • Combine-Future

    前面我们用过Just,其数据的发布和订阅是同步行为。如果希望数据的发布和订阅是异步的,可以使用Future。Future可以创建一个接收未来数据与事件的 Pub...

    YungFan
  • 漫谈并发编程:Future模型(Java、Clojure、Scala多语言角度分析)

    http://dantezhao.com/2017/04/23/concurrency-and-parallelism-future/ 0x00 前言 其实F...

    Albert陈凯

扫码关注云+社区

领取腾讯云代金券