zoukankan      html  css  js  c++  java
  • Generator

    Generator是一个异步编程的解决方案。

    基本写法:

    function* gen(){
     //code yield
    1;//暂停执行
     console.log(this)//生成器函数不能作为构造函数,并且他返回的也不是this对象,同时其函数内部的this可能是window
    *yield [1,2,3] //1 2 3 返回一个遍历器对象,直接将对象给遍历出来,可以用在获取嵌套函数,只能是在生成器函数中使用,普通函数中会报错
    var result =
    yield 2;
     return "2";  最后一次的执行结束结果: {value:"2“,done:true}
    }
    var gen = gen();//这里还未开始执行代码,只是返回了遍历器对象
    gen.next()//开始向后执行,遇到一个最新的yield停止执行,恢复执行 返回结果 {value:1,done:false}
    //其中value是 yield返回的值,done表示是否执行结束,false表示未结束,true表示结束。
    gen.next("a") //这个参数就是传递给result的 也就是说 var result = "a"
    gen.throw("a")// 在外部抛出了异常但是 捕获异常是在函数内部,也就是throw在函数外部,catch在函数内部,但是只捕获一次 如果内部没有异常捕获机制,就会被外部捕获,还会附带执行下一条gen.next()
    gen.throw("b")//在函数外部被捕获,由于生成器函数只捕获一次异常
    gen.return(”555“)//返回给定的值,并终结函数遍历 {value:"555",done:true}


      特点:

      1.function 后面加了一个* ,表示generator函数

      2.函数中使用yield暂停标志

      3.yield表达式在另一个表达式中的时候要使用括号,console.log("heo"+(yield 3));

      4.yield表达式放在赋值表达式后面不必加括号 ,var result = yield 3;

    Generator的异步函数应用:

      使用生成器来进行异步操作的缺点是需要自己一个一个next,也就是手动的执行,但是可以通过使用封装函数Thunk(Thunkify)来实现,自动的Next

      以及使用co模块来实现自动执行

      

  • 相关阅读:
    【codeforces 755A】PolandBall and Hypothesis
    【codeforces 755B】PolandBall and Game
    【codeforces 755C】PolandBall and Forest
    Enhancing network controls in mandatory access control computing environments
    NPM 使用介绍
    【oracle】首次启动SQL Developer配置java.exe出错(Could not find jvm.cfg! )
    day70-oracle PLSQL_02光标
    day69-oracle 22-DBCA
    day70-oracle 12-Java调用存储过程和存储函数
    day17 16.关于sql注入与PreparedStatement介绍
  • 原文地址:https://www.cnblogs.com/panjingshuang/p/11921316.html
Copyright © 2011-2022 走看看