协程的Generator实现
Generator 函数是协程在 ES6 的实现,最大特点就是可以交出函数的执行权(即暂停执行)。
整个 Generator 函数就是一个封装的异步任务,或者说是异步任务的容器。异步操作需要暂停的地方,都用yield语句注明。Generator 函数的执行方法如下。
function* gen(x) {var y = yield x + 2;return y;}var g = gen(1);g.next() // { value: 3, done: false }g.next() // { value: undefined, done: true }
async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用then方法指定下一步的操作。
进一步说,async函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而await命令就是内部then命令的语法糖。
await
使用 await 关键词后会等待promise 完
await后面一般是promise,如果不是直接返回await必须放在 async 定义的函数中使用await用于替代then使编码更优雅
