一、异步编程引入1、基本介绍同步代码按顺序执行等待每个操作完成异步发起操作后继续执行其他代码操作完成后再处理结果避免阻塞主线程提高应用响应性2、演示voidmain(){print(step 1);test();print(step 2);}Futurevoidtest()async{print(Start);StringdataawaitfetchData();print(Data:$data);int resultawaitcalculate();print(Result:$result);print(End);}FutureStringfetchData(){returnFuture.delayed(Duration(seconds:2),(){returnData loaded;});}Futureintcalculate(){returnFuture.delayed(Duration(seconds:1),(){return42;});}# 输出结果 step 1 Start step 2 Data: Data loaded Result: 42 End二、Future1、基本介绍Future 代表一个异步操作的最终结果类似于其他语言的 PromiseFuture 有如下状态Uncompleted: 操作进行中Completed: 成功完成Completed with an error: 失败完成2、基本使用创建 Future使用 then 方法FutureStringfetchUserData(){returnFuture.delayed(Duration(seconds:2),(){returnUser: Alice;});}voidmain(){print(Fetching user data...);fetchUserData().then((Stringdata){print(data);});print(All requests initiated);}# 输出结果 Fetching user data... All requests initiated User: Alice创建 Future使用 catchError 方法FutureStringfetchWithError(){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 wrong3、扩展Future.value()FutureStringimmediateFuture.value(Immediate);immediate.then((value)print(value));Future.error()FutureStringerrorFutureFuture.error(Exception(Error!));errorFuture.catchError((e)print(Caught:$e));三、Future 链式调用1、基本介绍每个 then 方法返回一个新的 Future可以继续链式调用2、演示FutureStringfetchUserId(){returnFuture.delayed(Duration(seconds:1),()user_123);}FutureStringfetchUserName(StringuserId){returnFuture.delayed(Duration(seconds:1),(){if(userIduser_123){returnAlice;}returnUnknown;});}FutureintfetchUserAge(StringuserName){returnFuture.delayed(Duration(seconds:1),(){if(userNameAlice){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: 253、Future.wait()1基本介绍wait 方法可以等待多个 Future 完成返回一个 List包含所有 Future 的结果async 函数自动返回 Future自动包装为 Futureawait 只在 async 函数中可用2演示FutureStringgetResult1(){returnFuture.delayed(Duration(milliseconds:500),()status: ok 1);}FutureStringgetResult2(){returnFuture.delayed(Duration(milliseconds:500),()status: ok 2);}voidmain(){Future.wait([getResult1(),getResult2()]).then((Listdynamicresults){print(results);});}# 输出结果 [status: ok 1, status: ok 2]