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模块来实现自动执行

  

posted @ 2019-11-24 09:00  唐糖PJS  阅读(150)  评论(0编辑  收藏  举报