async/await 是 generator 和 promise 的语法糖
function co (generator) {const g = generator()function handleResult (result) {if (result.done) return // 生成器函数结束// 如果 yield 后面不是一个 Promise 对象,就把它包装成 Promise 对象if (!result.value instanceof Promise) result.value = Promise.resolve(result.value)result.value.then(data => {handleResult(g.next(data))}, error => {g.throw(error)})}handleResult(g.next())}// 使用co(main)/**传入的一定要是一个 generator 函数*/function * main () {try {const users = yield ajax('/api/users.json')console.log(users)const posts = yield ajax('/api/posts.json')console.log(posts)const urls = yield ajax('/api/urls11.json')console.log(urls)} catch (e) {console.log(e)}}
