美文网首页
Async/await

Async/await

作者: edison0428 | 来源:发表于2020-01-09 15:48 被阅读0次

    先看代码

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

    相关文章

      网友评论

          本文标题:Async/await

          本文链接:https://www.haomeiwen.com/subject/qoiyactx.html