目录
1. async await
2. Generator
3. async await 和 Generator 区别
本文主要是学习:异步编程二三事 | Promise/async/Generator实现原理解析 中一部分内容的学习笔记,(强烈推荐阅读原本)
(一)async await
在多个回调依赖的场景中,尽管Promise通过链式调用取代了回调嵌套,但过多的链式调用可读性仍然不佳,流程控制也不方便,ES7 提出的async 函数,终于让 JS 对于异步操作有了终极解决方案,简洁优美地解决了以上两个问题。
async/await 两个关键字均用来实现异步处理,使用这两个关键字,可以书写比Promise更为简洁的异步处理代码。async函数可以返回Promise,当函数返回值时,Promise返回肯定结果,当async函数抛出异常时,Promise返回否定结果。
async/await实际上是对Generator(生成器)的封装,是一个语法糖。
1. 自动执行
初步实现了一个async/await
:
function* myGenerator() {
console.log(yield Promise.resolve(1)) //1
console.log(yield Promise.resolve(2)) //2
console.log(yield Promise.resolve(3)) //3
}
function run(myGenerator) {
var g = gen(); //由于每次gen()获取到的都是最新的迭代器,因此获取迭代器操作要放在step()之前,否则会进入死循环
function step(val) {
//封装一个方法, 递归执行next()
var res = g.next(val) //获取迭代器对象,并返回resolve的值
if (res.done)