Dart 教程 目录

Dart 异步编程 Async/Await

在现代Web开发和服务器端应用中,异步编程是一个非常重要的概念。它允许程序在等待某些操作完成时执行其他任务,从而提高效率和响应性。Dart语言通过 asyncawait 关键字提供了强大的异步编程支持。

Dart 中的 Future 和 Stream

在深入讲解 asyncawait 之前,我们先来了解一下 Dart 中的 FutureStream 类型。这两个类型是 Dart 异步编程的核心。

Future

Future 表示一个可能尚未完成的操作的结果。你可以将 Future 理解为一个承诺,它保证在未来某个时间点会提供一个结果或抛出一个异常。例如,网络请求、文件读写等通常都是异步操作,它们的结果会被封装在一个 Future 对象中。

创建 Future

你可以使用 Future 构造函数来创建一个新的 Future 实例:

在这个例子中,future 将会在稍后返回整数值 42

处理 Future 结果

可以使用 .then() 方法来处理 Future 完成后的结果:

.then() 方法接收一个回调函数,当 Future 完成时该回调函数将被调用,并且传递 Future 的结果作为参数。如果 Future 抛出异常,则可以使用 .catchError() 方法捕获并处理这些异常。

Stream

Stream 是一种特殊类型的 Iterable,用于表示数据流。它可以连续地发送数据项,直到流结束或发生错误。Stream 在处理实时数据(如用户输入、传感器数据等)时特别有用。

创建 Stream

你可以通过多种方式创建 Stream,包括使用 StreamController 或者从集合生成 Stream

在这个例子中,createStream 函数会每秒发送一次数字,总共发送五次。

处理 Stream 数据

可以使用 .listen() 方法来监听 Stream 并处理接收到的数据:

.listen() 方法接受三个可选参数:onData 回调函数用于处理接收到的数据,onError 用于处理错误,onDone 用于处理流结束的情况。

使用 async/await 进行异步编程

asyncawait 是 Dart 提供的简化异步编程的方法,使得异步代码看起来更像同步代码。

定义异步函数

使用 async 关键字定义一个异步函数:

在这个例子中,fetchData 函数是一个异步函数,它调用了另一个异步函数 fetchSomeData 来获取数据。await 关键字确保在继续执行之前等待 fetchSomeData 返回结果。

处理异步错误

在异步函数中,可以通过 try-catch 结构来处理可能出现的错误:

这里,如果 fetchSomeData 抛出异常,catch 块将会捕获并处理这个异常。

同时执行多个异步操作

有时你可能需要同时执行多个异步操作。Dart 提供了 Future.wait 方法来帮助你管理这种情况:

在这个例子中,Future.wait 接收一个 Future 列表,并返回一个包含所有 Future 结果的列表。这使得你可以方便地等待多个异步操作完成。

通过上述介绍,你应该对 Dart 中的异步编程有了一个全面的理解。FutureStream 类型以及 asyncawait 关键字的使用,为构建高效、响应迅速的应用提供了强有力的工具。


上一篇:Dart 匿名函数-箭头符号
下一篇:Dart 类声明
纠错
反馈