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'
    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;
  }

你可能感兴趣的:(Async/await)