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

22次阅读

共计 1032 个字符,预计需要花费 3 分钟才能阅读完成。


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


正文完
 0