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
posted @ 2019-05-19 23:50  hh9515  阅读(649)  评论(0编辑  收藏  举报