Gemerator函数

Generator函数是ES6的一种特殊的函数语法,最大的特点是可以交出函数的执行权(即暂停执行)。Generator函数不同于普通函数,是可以暂停执行的,写法也与普通函数不同,需要在函数名前面加一个星号 " * " 。Generator函数其实就是一个封装好的异步任务,或者说是异步任务的容器。异步操作需要暂停的地方,都需要用yield语法著名。

写法如下:

let x = 100;
function * gen(){
      let y = 10;
      console.log(x,y);
      yield console.log("yield后的内容");
      console.log("yield下的内容");
      yield console.log("第二个yield后的内容");
      yield "第二个yield后的内容";
      return 2;
  }    
  let end = gen();
  
  end();  ===> 不会执行
  end.next();  ===>  执行到第一个yield所在位置,也就是会输出:10、100、yield后的内容

此时当我们调用end()执行的时候并不会执行函数体中的代码,调用Generator函数会返回一个对象指针,指针上有一个next方法,会移动内部指针指向第一个遇到的yield语句,上例就是执行到第一个yield所在位置即停止。
next方法的作用就是将函数体中的代码分阶段执行。每次调用next方法,会返回一个对象,表示当前阶段的信息(value属性和done属性),value属性的值是对应的yield后的表达式的值,如果表达式没有返回值则值为undefined;done是一个布尔值,代表当前Generator函数是否语句执行完毕。

Generator函数内部可以部署错误处理代码,捕获函数体外抛出的错误。代码如下:

function * gen(x){
   try{
       let v = yield x + 100;
       console.log(v);
   }catch(e){
       console.log(e);   ===>  出错了
   }
   return v;
}
let generator = gen(1);
generator.next();
generator.throw("出错了");

上面的代码,Generator函数体外,调用throw方法抛出的错误,可以被函数体内的try…catch代码块捕获到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值