自动执行generator函数
◼ 目前我们的写法有两个问题:
第一,我们不能确定到底需要调用几层的Promise关系;
第二,如果还有其他需要这样执行的函数,我们应该如何操作呢?
◼ 所以,我们可以封装一个工具函数execGenerator自动执行生成器函数
<script>
// 封装一个请求方法
function requestData(count){
return new Promise((resolve,rejdect)=>{
setTimeout(()=>{
resolve(count)
},2000)
})
}
// 3. 生成器的处理方案
function* getData(){
const res1 =yield requestData("hdc")
console.log("res1:",res1)
const res2 =yield requestData(res1+",kobe")
console.log("res2:",res2)
const res3 =yield requestData(res2+",james")
console.log("res3:",res3)
}
// const generator = getData()
// generator.next().value.then(res1 =>{
// generator.next(res1).value.then(res2 =>{
// generator.next(res2).value.then(res3 =>{
// generator.next(res3)
// })
// })
// })
// 自动化执行生成器函数
function execGenFn(fn){
// 获取对应函数的生成器
const generator = fn()
//定义一个递归函数
function exec(res){
const result = generator.next(res)
if(result.done){return}
result.value.then(res=>{
exec(res)
})
}
// 执行递归函数
exec()
}
execGenFn(getData)
</script>
标签:const,函数,generator,res2,res1,生成器,next
From: https://www.cnblogs.com/hdc-web/p/18489670