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


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

在Dart中导入库

在Dart中使用异步,须要先导入异步库。网络

Future

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

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

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


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

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

如下是发生异常的示例。教程


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


如今,若是运行该程序,等待2秒钟后才出结果。让咱们看另外一个例子。开发


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

可是,若是咱们有一个Future,咱们想先执行它,而后再执行print语句。这就须要使用 async/await 了。

Async/Await

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

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

咱们将代码包装在 try/catch 块中,来捕获任何异常(以前使用catchError回调来捕获)。要使用关键字await,就必须使用async关键字标记该函数,不然它将没法工做。

总结

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


相关文章
相关标签/搜索