zoukankan      html  css  js  c++  java
  • 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=>{
      
        //得到函数的返回值  
      
      })
      

      
      
      
  • 相关阅读:
    P5049 旅行(数据加强版)(基环树)
    P5024 保卫王国(动态dp/整体dp/倍增dp)
    CF891C Envy(离线/在线+可撤销并查集/并查集/LCT)
    CF1217题解
    CF1215题解
    浅谈bitset
    CF1214题解
    CF1213F Unstable String Sort(差分)
    C++创建和使用动态链接库
    交叉编译openssl1.1.1a
  • 原文地址:https://www.cnblogs.com/bigbang66/p/13610999.html
Copyright © 2011-2022 走看看