// 一个模拟异步ajax请求的函数,返回一个promise
function fetchData(data){
return new Promise((resolve, reject) => {
setTimeout(()=>{
resolve("xxx: "+ data)
},2000)
})
}
// 定义一个生成器函数,yield关键字模拟await关键字
function* gen(){
const res1 = yield fetchData('111')
const res2 = yield fetchData('222')
console.log(res1)
console.log(res2)
}
// 定义一个执行生成器函数的函数,参数需要传入一个生成器
function run(gen){
// 执行生成器函数,获取一个迭代器对象
const it = gen()
// 一个执行迭代器对象next方法的函数,参数为
const exec = (res) => {
// 执行迭代器的next方法,并将res传递给yield表达式左边的变量
const result = it.next(res)
// 判断是否执行完毕
if(result.done) return result.value
/*
如果还有 yield表达式,则递归调用promise的then方法,将then方法
中的结果传递给yield表达式
*/
result.value.then(exec)
}
exec()
}
run(gen)
用promise+生成器函数模仿 async和await
最新推荐文章于 2023-12-27 08:49:30 发布
593

被折叠的 条评论
为什么被折叠?



