当前位置: 首页 > news >正文

Dart - 异步编程引入、Future、Future 链式调用

一、异步编程引入

1、基本介绍
  1. 同步:代码按顺序执行,等待每个操作完成

  2. 异步:发起操作后继续执行其他代码,操作完成后再处理结果(避免阻塞主线程,提高应用响应性)

2、演示
voidmain(){print("step 1");test();print("step 2");}Future<void>test()async{print('Start');Stringdata=awaitfetchData();print('Data:$data');int result=awaitcalculate();print('Result:$result');print('End');}Future<String>fetchData(){returnFuture.delayed(Duration(seconds:2),(){return'Data loaded';});}Future<int>calculate(){returnFuture.delayed(Duration(seconds:1),(){return42;});}
# 输出结果 step 1 Start step 2 Data: Data loaded Result: 42 End

二、Future

1、基本介绍
  • Future 代表一个异步操作的最终结果,类似于其他语言的 Promise,Future 有如下状态
  1. Uncompleted: 操作进行中

  2. Completed: 成功完成

  3. Completed with an error: 失败完成

2、基本使用
  1. 创建 Future,使用 then 方法
Future<String>fetchUserData(){returnFuture.delayed(Duration(seconds:2),(){return'User: Alice';});}voidmain(){print('Fetching user data...');fetchUserData().then((Stringdata){print(data);});print('All requests initiated');}
# 输出结果 Fetching user data... All requests initiated User: Alice
  1. 创建 Future,使用 catchError 方法
Future<String>fetchWithError(){returnFuture.delayed(Duration(seconds:1),(){throwException('Something went wrong');});}voidmain(){fetchWithError().then((Stringdata){print('Success:$data');}).catchError((error){print('Caught error:$error');});}
# 输出结果 Caught error: Exception: Something went wrong
3、扩展
  1. Future.value()
Future<String>immediate=Future.value('Immediate');immediate.then((value)=>print(value));
  1. Future.error()
Future<String>errorFuture=Future.error(Exception('Error!'));errorFuture.catchError((e)=>print('Caught:$e'));

三、Future 链式调用

1、基本介绍
  • 每个 then 方法返回一个新的 Future,可以继续链式调用
2、演示
Future<String>fetchUserId(){returnFuture.delayed(Duration(seconds:1),()=>'user_123');}Future<String>fetchUserName(StringuserId){returnFuture.delayed(Duration(seconds:1),(){if(userId=='user_123'){return'Alice';}return'Unknown';});}Future<int>fetchUserAge(StringuserName){returnFuture.delayed(Duration(seconds:1),(){if(userName=='Alice'){return25;}return0;});}voidmain(){fetchUserId().then((StringuserId){print("fetchUserId:$userId");returnfetchUserName(userId);}).then((StringuserName){print("fetchUserName:$userName");returnfetchUserAge(userName);}).then((int age){print("fetchUserAge:$age");});}
# 输出结果 fetchUserId: user_123 fetchUserName: Alice fetchUserAge: 25
3、Future.wait()
(1)基本介绍
  1. wait 方法可以等待多个 Future 完成,返回一个 List,包含所有 Future 的结果

  2. async 函数自动返回 Future(自动包装为 Future),await 只在 async 函数中可用

(2)演示
Future<String>getResult1(){returnFuture.delayed(Duration(milliseconds:500),()=>'status: ok 1');}Future<String>getResult2(){returnFuture.delayed(Duration(milliseconds:500),()=>'status: ok 2');}voidmain(){Future.wait([getResult1(),getResult2()]).then((List<dynamic>results){print(results);});}
# 输出结果 [status: ok 1, status: ok 2]
http://www.jsqmd.com/news/802076/

相关文章:

  • RadiAnt DICOM Viewer 2024:解锁高效医学影像工作流的新利器
  • Vivado里配置RFSoC数据转换器IP,这10个参数新手最容易搞错(附PG269避坑指南)
  • 从西门子模块到TI方案:解析热电偶与PT100热电阻采样电路的设计精要与噪声对策
  • 终极iOS设备降级指南:5步让旧iPhone/iPad重获新生 [特殊字符]
  • openclaw官网中文版入口_本地免费部署直连手机教程!
  • 告别手动下载!3步轻松批量获取网易云音乐FLAC无损音乐
  • java在Windows环境下执行cmd命令踩坑记录
  • 告别Rviz!只用Gazebo完成MoveIt机械臂运动规划与仿真的完整工作流
  • 医学影像AI泛化难题:数据偏差与标签噪声如何影响模型临床可靠性
  • Python PyPDF2实战:给你的PDF文件加把‘锁’(加密)和换个‘身份证’(修改元数据)
  • 5步掌握ComfyUI插件:AI图像增强终极指南
  • 从WM8988切换到立晶CL1026?这些PCB布局细节千万别照搬(实战经验分享)
  • 告别调参焦虑!用Matlab Regression Learner App快速搞定你的第一个回归模型(附三维曲面拟合实战)
  • 从2D到3D的思维转换:用AD17给老PCB库“一键升级”,让嘉立创下单前看清每个角落
  • AI时代如何构建个人核心竞争力:从技能清单到能力叙事的实践指南
  • AI技能跨平台迁移实战:从Claude Code到OpenClaw的自动化转换
  • 2026年5月四川钢结构加工优质厂家推荐:螺纹钢等现货直供+配套加工 - 深度智识库
  • ComfyUI Impact Pack 终极指南:释放AI图像细节增强的完整潜能
  • 2026年西安印刷厂一站式服务深度横评:如何找到靠谱的高品质画册定制与活页环装工厂 - 精选优质企业推荐官
  • 学术研究者的终极文档处理方案:ScienceDecrypting 完整指南
  • 2026年4月市面上可靠的3D打印丝源头工厂口碑推荐,三色3D打印增材生产线/3D打印生产线,3D打印丝品牌哪家专业 - 品牌推荐师
  • Windows 11任务栏拖放功能修复:技术原理与高效恢复方案
  • ChatmemoryRedis 历史对话存【REDIS】20260512
  • 开发转产品的334天 260331
  • AI证件照生成器横向评测:从原理到实战,如何选择最佳工具?
  • AI算力需求蔓延,CPU短缺潮来袭,这场短缺还要持续多久?
  • 别再被Timing Arc绕晕了!数字后端STA入门,从看懂.lib文件里的时序弧开始
  • 手把手教你用HITRAN在线网站搞定气体光谱数据筛选与下载(附避坑指南)
  • AI如何重塑药物研发:从靶点发现到临床试验的全流程解析与实践
  • 如何快速上手PCL启动器:打造专属Minecraft游戏入口的终极指南