美文网首页
async和await原理

async和await原理

作者: icecreamco | 来源:发表于2019-07-16 22:22 被阅读0次

原理

Future是Dart语法异步的核心,通过async标记一个方法为异步,返回一个future对象,进而对flutter进行监听,获取异步方法的返回值。一般用法为:

Future<int> getCount async {
  ~~~~
  return count;
}

Future<int> future = getCount();

getCount().then((value) {
  int res = value;
});

单个异步任务很好理解,代码写起来也很易读,但是多个异步任务协同工作时,这种写法会特别冗余且不易理解,例如:

Future<int> _loadFromDisk(){}
Future<String> _fetchNetworkData(){}

Future<ProcessData> createData() {
  return _loadFromDisk().then((id) {
    return _fetchNetworkData(id);
  }).then((data) {
    return ProcessData(data);
  })
}

这个方法表示首先调用_loadFromDisk()方法,获取id后再调用_fetchNetworkData()方法,获取data后返回ProcessData,这个是两层嵌套的例子,倘若是3层、4层乃至更多层,代码将杂乱无章。

为了针对这个问题,Dart引入了asyncawait机制,将异步嵌套的代码转换为类似同步代码的结构,极大的方便了编码效率和可读性,上面的两层嵌套等同于:

ProcessData createData() async {
  int id = await _loadFromDisk();
  String data = await _fetchNetworkData(id)
  return ProcessData(data)
}

结论

async标识一个方法为异步方法,返回的是一个Future对象,可以监听Future对象的返回值,也可以用then的方式等待异步方法执行完毕后继续执行一个方法,若有多个异步方法需要顺序执行,可以采用then嵌套的方式,但是层数较多时可读性极差,await可以理解为一个异步的语法糖,通过这种方式可以用类似同步的代码块实现异步方法的顺序执行,可读性很高。

相关文章

  • async、await

    async、await 的特点,优点和缺点,await 的原理是什么? 一个函数如果加上 async 那么该函数就...

  • async和await

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

  • async/await的深究

    我们都知道async/await是Generator函数的语法糖,为了更加深刻的了解async/await的原理,...

  • ES8(一) —— async&await

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

  • async和await原理

    原理 Future是Dart语法异步的核心,通过async标记一个方法为异步,返回一个future对象,进而对fl...

  • ES6中的好东西

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

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

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

  • async-await 网上看到的记录

    一、走进Async-await原理1、原理1async函数返回一个 Promise 对象,可以使用then方法添加...

  • ES2017 async 函数

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

  • async-await

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

网友评论

      本文标题:async和await原理

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