带你读《深入浅出Dart》十五、Dart的异步编程

简介: 带你读《深入浅出Dart》十五、Dart的异步编程

十五、Dart的异步编程

在 Dart 中,我们使用 Future async/await 来进行异步编程。当你调用一个异步函数时,它将立即返回一个 Future 对象。当异步操作完成时,Future 将被“完成”或“解析”。

1.使用 Future

Future 是 Dart 中用于表示异步操作的对象。当你调用一个异步函数时,它会立即返回一个 Future 对象,表示这个异步操作的结果。

 

Future 对象有三种状态:

未完成:异步操作还没有完成。 完成(resolved):异步操作成功完成,并返回一个值。 错误(rejected):异步操作失败,并返回一个错误。

 

如果你了解Javascript中的Promise,那么就能非常简单掌握Future了

一个简单的 Future 示例如下:

 

Future fetchUserOrder() {
  // 模拟网络延迟
  return Future.delayed(Duration(seconds: 2), () => 'Large Latte');}
void main() {
  print('Fetching user order...');
  fetchUserOrder()
      .then((order) => print('Your order is: $order'))
      .catchError((error) => print(error));}

 

在这个示例中,fetchUserOrder 是一个异步函数,它使用 Future.delayed 来模拟网络延迟。当调用 fetchUserOrder 时,它立即返回一个 Future 对象。然后我们使用 then catchError 来处理 Future 的成功和错误结果。

 

2.使用 async/await

你也可以使用 async/await 关键字来更简洁地处理异步操作。一个使用 async/await 的示例如下:

 

Future fetchUserOrder() {
  return Future.delayed(Duration(seconds: 2), () => 'Large Latte');}
Future main() async {
  print('Fetching user order...');
  try {
    var order = await fetchUserOrder();
    print('Your order is: $order');
  } catch (error) {
    print(error);
  }}

 

在这个示例中,我们使用 async 关键字来标记 main 函数是一个异步函数。然后我们使用 await 关键字来等待 fetchUserOrder 的结果。如果 fetchUserOrder 抛出一个错误,我们可以使用 try/catch 来处理这个错误。

需要注意的是,你只能在 async 函数中使用 await 关键字。

 

相关文章
|
存储 人工智能 图形学
GLB/GLTF在线纹理编辑
GLB文件中的纹理数据采用了嵌入式存储的方式,具有较小的文件体积和高效的数据传输,能够提高3D模型的加载速度和渲染质量。
597 1
|
2月前
|
Web App开发 移动开发 前端开发
H5页面适配大屏和小屏的方案
H5页面适配大屏和小屏的方案
299 62
|
SQL 数据可视化 数据挖掘
零门槛!人人可用的开源 BI 工具!
【9月更文挑战第14天】在数据驱动时代,商业智能(BI)工具对企业和个人至关重要。然而,许多商业BI工具价格昂贵且有技术门槛。幸运的是,一些优秀的开源BI工具不仅功能强大,还零门槛,人人可用。本文介绍了开源BI工具的优势,包括成本低、灵活性高及社区支持,并推荐了Metabase和Superset两款工具。通过简单的安装配置、创建报表和仪表盘,以及分享与协作,用户可以轻松挖掘数据价值,做出明智决策。
587 16
|
人机交互
Flutter笔记 - ListTile组件及其应用
Flutter笔记 - ListTile组件及其应用
748 0
|
人工智能 自然语言处理 安全
YonGPT发布背后,“实用主义”成为大模型落地新风向
首个企业服务大模型YonGPT正式宣告了企业服务大模型全新时代的到来。
329 0
|
JavaScript
Vue3数值动画(NumberAnimation)
该文档介绍了一个基于 Vue 的数值动画组件 `NumberAnimation`,提供了丰富的配置选项,如起始值、目标值、动画时长等,并支持自定义前缀、后缀及样式。通过简单的方法和事件,可以轻松控制动画的播放与停止。
517 0
Vue3数值动画(NumberAnimation)
|
缓存 Shell 开发工具
Flutter环境搭建及版本管理
Flutter环境搭建及版本管理
325 0
|
JSON Rust JavaScript
🎉使用Tauri+vite+koa2+mysql开发了一款待办效率应用
这是一个基于tauri+vite的应用,它采用了一些最新的前端技术,包括 Tauri、Vue3、Vite5、koa2 和 mysql。它提供了丰富的效率管理工具。
234 8
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统自定义业务回写状态的一种新方法(二)
基于若依的ruoyi-nbcio流程管理系统自定义业务回写状态的一种新方法(二)
201 2
|
前端开发 JavaScript UED
window.open()用法详解
window.open()用法详解
1097 0