本文实例讲述了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发电机函数的应用实例分析