Async/await

先看代碼

push到一個(gè)新的頁面,然后手動(dòng)pop返回一個(gè)字符串

push_future() async{

    print("1111");
    var result = await Navigator.push(context, MaterialPageRoute(builder: (context){

      return NextPage();
    }));
    print("result:${result}");

    print("2222");
  }

調(diào)用方法

    var fun = push_future();
    print("fun:${fun}");

打印如下:

第三行開始是在二級頁面pop之后才打印的

    flutter: 1111
    flutter: fun:Instance of 'Future<dynamic>'
    flutter: result:next pop
    flutter: 2222

得出:

  • 用來表示函數(shù)是異步的,定義的函數(shù)會(huì)返回一個(gè)Future對象,可以使用then方法添加回調(diào)函數(shù)
  • 后面是一個(gè)Future,表示等待該異步任務(wù)完成,異步完成后才會(huì)往下走;await必須出現(xiàn)在 async 函數(shù)內(nèi)部

可以看到,我們通過async/await將一個(gè)異步流用同步的代碼表示出來了

其實(shí),無論是在JavaScript還是Dart中,async/await都只是一個(gè)語法糖,編譯器或解釋器最終都會(huì)將其轉(zhuǎn)化為一個(gè)Promise(Future)的調(diào)用鏈。

如果是獲取網(wǎng)絡(luò)數(shù)據(jù),就不能如上了,因?yàn)榉祷氐氖荈uture對象

定義一個(gè)全局變量netData 接受比較好
get_net_right_data() async {

    print("1111_right");
    netData = await Future.delayed(Duration(seconds: 2),(){

      return '網(wǎng)絡(luò)數(shù)據(jù)獲取到了';
    });

    print("netData:${netData}");
    return netData;
  }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容