Async/await语法糖实现(Generator)

// generator也是一种迭代器(Iterator) 有next方法,并返回一个对象{value:...,done:...}

function run(generatorFunction) {

// 创造出迭代器,下面就可以操控迭代器开始迭代了
const iterator = generatorFunction()

(function handleNext(value){

const next = iterator.next(value)
 
if(next.done){
 
return next.value
} else {


return Promise.resolve(next.value)
.then(handleNext,(err)=>Promise.resolve(iterator.throw(err)).then(handleNext))
}
})()

}



run(function *(){
try{
const usersResponse = yield fetch(`${apiUrl}/users`)
console.log(usersResponse)
} catch (err){
console.log(err)
}
})


// 假想async 关键字就是执行了这个run函数,async函数里的内容就是用generator包裹住了,所有的await相当于yeild
原文地址:https://www.cnblogs.com/eret9616/p/10891587.html