自动执行generator生成器函数

自动执行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>
posted @ 2024-10-21 16:11  韩德才  阅读(22)  评论(0)    收藏  举报