第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

【Flutter 1-13】Flutter手把手教程Dart語(yǔ)言——異步、Future、Stream、async、await詳解

標(biāo)簽:
iOS 前端工具 vuex

作者 | 弗拉德

来源 | 弗拉德

异步

Dart 代码库中有大量返回FutureStream对象的函数,这些函数都是异步的,它们会在耗时操作执行完毕前直接返回而不会等待耗时操作执行完毕。

asyncawait关键字用于实现异步编程,并且让你的代码看起来就像是同步的一样。

Future

可以通过下面两种方式,获得Future执行完成的结果:

  • 使用asyncawait

  • 使用Future API

使用asyncawait的代码是异步的,但是看起来有点像同步代码。例如,下面的代码使用await等待异步函数的执行结果。


await  lookUpVersion();

必须在带有async关键字的异步函数中使用 await


Future  checkVersion() async {

var version = await  lookUpVersion();

// 使用 version 继续处理逻辑

}

尽管异步函数可以处理耗时操作,但是它并不会等待这些耗时操作完成,异步函数执行时会在其遇到第一个 await表达式的时候返回一个Future对象,然后等待await表达式执行完毕后继续执行。

使用trycatch以及finally来处理使用await导致的异常:


try {

version = await  lookUpVersion();

} catch (e) {

// 无法找到版本时做出的反应

}

你可以在异步函数中多次使用await关键字。例如,下面代码中等待了三次函数结果:


var entrypoint = await  findEntrypoint();

var exitCode = await  runExecutable(entrypoint, args);

await  flushThenExit(exitCode);

await表达式的返回值通常是一个Future对象;

如果不是的话也会自动将其包裹在一个Future对象里。Future对象代表一个"承诺",await表达式会阻塞直到需要的对象返回。

如果在使用await时导致编译错误,请确保await在一个异步函数中使用。例如,如果想在main()函数中使用await,那么main()函数就必须使用async关键字标识。


Future  main() async {

checkVersion();

print('在 Main 函数中执行:版本是 ${await lookUpVersion()}');

}

声明异步函数

定义异步函数只需在普通方法上加上async关键字即可。

将关键字async添加到函数并让其返回一个Future 对象。假设有如下返回String对象的方法:


String  lookUpVersion() => '1.0.0';

将其改为异步函数,返回值是Future


Future<String> lookUpVersion() async => '1.0.0';

注意,函数体不需要使用Future API。如有必要,Dart会创建Future对象。

如果函数没有返回有效值,需要设置其返回类型为 Future<void>

Stream

Stream也是用于接收异步事件数据,和Future不同的是,它可以接收多个异步操作的结果(成功或失败)。 也就是说,在执行异步任务时,可以通过多次触发成功或失败事件来传递结果数据或错误异常。Stream常用于会多次读取数据的异步任务场景,如网络内容下载、文件读写等。举个例子:


Stream.fromFutures([

// 1秒后返回结果

Future.delayed(new  Duration(seconds: 1), () {

return  "hello 1";

}),

// 抛出一个异常

Future.delayed(new  Duration(seconds: 2),(){

throw  AssertionError("Error");

}),

// 3秒后返回结果

Future.delayed(new  Duration(seconds: 3), () {

return  "hello 3";

})

]).listen((data){

print(data);

}, onError: (e){

print(e.message);

},onDone: (){

  

});

上面的代码依次会输出:


hello 1

Error

hello 3

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
移動(dòng)開(kāi)發(fā)工程師
手記
粉絲
3
獲贊與收藏
16

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消