generator生成器

generator生成器函数

定义

  • function后面加了*
  • 函数体里有 yield关键字
    function * 函数名{
    
      let obj = yield "生成器函数" 
    
    
    }
    

    表现形式

    • 调用这个函数,不会立即执行函数体里的内容,返回一个对象
    • 通过这个对象的next方法,可以驱动函数的执行,但是并不会执行完,执行到下一个yield关键字的时候,停住
    • 调用next()方法返回的结果
      • value: yield关键字后面的表达式的结果。
      • done:函数是否执行完。 (当函数return的时候执行完,返回true)
      • 函数return的时候,value是return的内容,done是true
    • next()方法可以加参数
      • next(参数)
      • 这个参数会作为上一个yield关键字的返回值

     

     

    作用

    • 函数可以返回多个值
    • 在调用函数之后,可以给函数体里传递数据了
    • 调用函数的时候,可以控制函数内部的执行了
    • 可以解决异步问题

     

     // 写一个generator函数的执行器
    
            function run(gen) {
    
                // 编写一段递归调用来执行我们的代码
    
                let lt = gen();
    
                debugger
    
                return new Promise((reslove, reject) => {
    
                    // {value,done}
    
                    function step(data) {
    
                        if (data.done) {
    
                            console.log("递归调用结束了");
    
                            reslove(data.value)
    
                        } else {
    
                            data.value.then(res => {
    
                                step(lt.next(res))
    
                            })
    
                        }
    
                    }
                    step(lt.next())
    
                })
    
            }
    

     

    async/await

    这是ES7的语法,它是基于generator函数做的语法糖。

  • async function 函数名(){
    
      let obj = await getName()
    
      return obj
    
    }
    
    
    
    函数名().then(res=>{
    
      //得到函数的返回值  
    
    })
    

    
    

     

posted @ 2020-09-03 22:26  橘雎  阅读(202)  评论(0编辑  收藏  举报