美文网首页
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

    浅谈Async/Await用 async/await 来处理异步 async和await async:声明一个异步...

  • ES8(一) —— async&await

    目录 async和普通函数的区别 await async/await处理多回调异步 async和await必须配合...

  • 10.5 async 及 await

    10.5 async 及 await问题一:async 及 await 的特点,它们的优点和缺点分别是什么?awa...

  • async await Promise

    深入理解 async await Promise Promise.all() 问题:await 一个 async ...

  • ES6中的好东西

    1 Await/Async 前端的回调时代我没有赶上,我赶上的是await/async时代。await和async...

  • 使用 async 和 await,实现 fetch 同步请求

    使用 async 和 await,实现 fetch 同步请求 关于 async 和 await 的介绍https:...

  • 3.2KOA async/await 语法

    async/await 语法 作用 解决异步嵌套问题,传说中的终极解决方案 异步问题 async/await 实现...

  • async-await

    一、async-await和Promise的关系 async-await是promise和generator的语法...

  • ES2017 async 函数

    async 和 await 在干什么 每个名称都有意义async : 异步await: async wait简...

  • 小程序-云开发

    async和await async:异步(无等待)await:等待(是为了同步) 一、await 关键字只在 as...

网友评论

      本文标题:async和await的问题

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