generator 和 iterator
对于 generator 生成的迭代器,调用函数,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象,总是需要手动调用 next 函数去获取下一个迭代器状态
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator(); // 返回一个状态
hw.next()
// { value: 'hello', done: false }
hw.next()
// { value: 'world', done: false }
hw.next()
// { value: 'ending', done: true } done 为 true 代表状态机执行完
hw.next()
// { value: undefined, done: true }
上例来自 generator
封装 generator 为 自执行函数 async
async 可以看做迭代器的一个语法糖,在async 里面封装一个 自执行函数,需要注意 async 函数里面所有异步都会被同步处理,上一个异步执行完成才会执行下一个异步操作,最后返回 Promise 对象
封装 promise 异步操作