实现一个 async 函数
function async (genertor) {
let iterator = genertor()
function handle(lastResult) {
const {done, value} = lastResult
if(done) return
if(value instanceof Promise) {
value.then(res =>{
handle(iterator.next(res))
}).catch(e => {
iterator.throw(e)
})
} else {
throw new Error('iterator is not a Promise')
}
}
handle(iterator.next())
}
async(function* () {
const res1 = yield Promise.resolve(1)
console.log(1,res1)
const res2 = yield Promise.resolve(res1 + 1)
console.log(2,res2)
const res3 = yield Promise.resolve(res2 + 1)
console.log(3,res3)
})
// ----输出
// 1 1
// 2 2
// 3 3