美文网首页
async和await的问题

async和await的问题

作者: lovefo | 来源:发表于2019-06-12 14:28 被阅读0次
    //HTTP的get请求返回值为Future<String>类型,即其返回值未来是一个String类型的值
      getData() async {    //async关键字声明该函数内部有代码需要延迟执行
        return await http.get(Uri.encodeFull(url), headers: {"Accept": "application/json"}); //await关键字声明运算为延迟执行,然后return运算结果
      }
    

    然后我们调用这个函数,想获取其结果:

     String data = getData();
    

    在书写时,在IDE中这个代码是没有问题的,但是当我们运行这段代码时,就报错了:


    image

    为什么呢?因为data是String类型,而函数getData()是一个异步操作函数,其返回值是一个await延迟执行的结果。在Dart中,有await标记的运算,其结果值都是一个Future对象,Future不是String类型,所以就报错了。

    那如果这样的话,我们就没法获取到延迟执行的结果了?当然可以,Dart规定有async标记的函数,只能由await来调用,比如这样:

    String data = await getData();
    

    但是要使用await,必须在有async标记的函数中运行,否则这个await会报错:


    image

    于是,我们要为这个给data赋值的语句加一个async函数的包装:

    String data;
    setData() async {
      data = await getData();    //getData()延迟执行后赋值给data
    }
    

    上面这种方法一般用于调用封装好的异步接口,比如getData()被封装到了其他dart文件,通过使用async函数对其调取使用

    重点

    • await关键字必须在async函数内部使用
    • 调用async函数必须使用await关键字

    相关文章

      网友评论

          本文标题:async和await的问题

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