Async/await

先看代码

push到一个新的页面,然后手动pop返回一个字符串

push_future() async{

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

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

    print("2222");
  }

调用方法

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

打印如下:

第三行开始是在二级页面pop之后才打印的

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

得出:

  • 用来表示函数是异步的,定义的函数会返回一个Future对象,可以使用then方法添加回调函数
  • 后面是一个Future,表示等待该异步任务完成,异步完成后才会往下走;await必须出现在 async 函数内部

可以看到,我们通过async/await将一个异步流用同步的代码表示出来了

其实,无论是在JavaScript还是Dart中,async/await都只是一个语法糖,编译器或解释器最终都会将其转化为一个Promise(Future)的调用链。

如果是获取网络数据,就不能如上了,因为返回的是Future对象

定义一个全局变量netData 接受比较好
get_net_right_data() async {

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

      return '网络数据获取到了';
    });

    print("netData:${netData}");
    return netData;
  }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容