ES6发电机函数的应用实例分析

  

本文实例讲述了ES6发电机函数的应用。分享给大家供大家参考,具体如下:

  
  

发电机函数是一种异步编程解决方案,发电机函数会返回一个遍历器对象,发电机函数是一个普通函数,但是有两个特征。一是,函数关键字与函数名之间有一个星号;二是,函数体内部使用产量表达式。

     

        *函数fn () {   console.log('你好');   返回“乔”;   }//执行fn()时不会直接执行方法体中的代码,它会返回一个指针,这个指针实现了interator接口,也就是返回一个interator对象   让它=fn ();//通过调用下就会执行方法体,返回结果是{值:“乔”,完成:真正的},其中下返回的是函数体中返回的值   让res=it.next ();   console.log (res);      之前      

        *函数fn () {//和收益率相配合,把一个发生器内部分为几个断点来执行,每个断点就是收益率语句//注意收益和回报的区别:收益率可以有多个,回来只能有1个   收益率1;   收益率2;   产量3;   返回4;//可以没有返回值,为完成真正的价值将会是未定义的   }   让它=fn ();//在的循环中只能打印完成值为假的价值,完成为真时,程序终止   (让v () {   console.log (v);//分别输出1 2 3   }      之前      

        *函数fn (_name) {   让name=_name收益率;//收益率的默认值为定义   返回名称;   }   让它=fn (“(”);   console.log (it.next ());//{值:“乔”,完成:假}   console.log (it.next(汤姆));//{值:“汤姆”,完成:真正}//此处价值应该为未定义,但是通过下参数的形式赋值改变了最后一个值   console.log (it.next(莉莉));//{值:未定义,完成:真}//已经循环完毕,即使传值也是未定义的      之前      

        函数之和(a, b) {   返回一个+ b;   }   *函数fn () {   让res=总和(收益率1,5 +(3)收益率);   console.log (res);   控制台。日志(“我的qq:”+(收益率qq));//收益率在一个语句中需要括起来   }   fn ();      之前      

  

异常捕获的方式1:

        *函数fn () {   让qq=产量;//收益率默认返回未定义,不会抛出异常   console.log (qq);   }   让g=fn ();   g.next ();//第一个断点没有输出//g。下一个(“qq 11111”);//完毕之后传值输出:qq 11111   g.throw(“错误!”);//未捕获错误!      之前      

异常捕获的方式2:

        *函数fn () {   让qq;   尝试{   qq=产量;//收益率默认返回定义   }捕捉(e) {   控制台。日志(“qq有错误”);   最后}{   console.log (qq);   }   }   让g=fn ();   g.next ();   g.throw(“错误!”);//qq有错误//定义      之前      

异常捕获的方式3:

        *函数fn () {   让qq;   qq=产量;   console.log (qq);   }   让g=fn ();   g.next ();   尝试{   g.throw(“错误!”);   }捕捉(e) {   控制台。日志(“qq有误差!”);   }      之前      

异常捕获的方式4:

        *函数fn () {   让qq;   尝试{   qq=ff收益率;//ff未定义,所以qq不会被正确赋值此处是收益的非异常   }捕捉(e) {   console.log (“err1”);   }   console.log (qq);   }   让g=fn ();   g.next ();   g。下一个(“qq 5554”);//err1//定义      之前      

        函数asyncF(名字){   返回新的承诺(函数(解决){   setTimeout(函数(){   解决('我的名字是' +名字);   });   });   }   *函数fn () {   控制台。日志(收益率asyncF (' ('));   }   让女朋友=fn ();   函数执行(gf,值){   让res=gf.next(价值);   如果(! res.done) {   如果(res)。值运算符承诺){   res.value。然后(函数(v) {   exec (gf, v);   })   其他}{   exec (gf, res.value);   }   }   }   exec (gf);//我的名字是乔      之前      

更复杂的写法:

        函数asyncF(名字){   返回新的承诺(函数(解决){   setTimeout(函数(){   解决('我的名字是' +名字);   });   });   }   函数之和(a, b) {   返回新的承诺(函数(解决){   setTimeout(函数(){   解决(a + b);   });   })   }   *函数fn(名字){   如果((产量总和(3、5))比;6){   控制台。日志(收益率asyncF(名称));   其他}{   console.log('错误');   }   }   让女朋友=fn (“(”);//发电机执行器相当于tj/co模块   函数执行(gf,值){   让res=gf.next(价值);   如果(! res.done) {   如果(res)。值运算符承诺){   res.value。然后(函数(v) {   exec (gf, v);   })   其他}{   exec (gf, res.value);   }   }   }   exec (gf);//我的名字是乔      

ES6发电机函数的应用实例分析