ES6的Generator函数详解

ES6的Generator函数详解

目的:用同步的方式来解决异步问题

function* helloWorldGenerator() {
    
    
  yield "hello";
  yield "world";
  return "ending";
}

var hw = helloWorldGenerator();

console.log("hw", hw); 

//执行
console.log(hw.next(),1);
console.log(hw.next(),2);
console.log(hw.next(),3);
console.log(hw.next(),4);

1.Generator函数中的function关键字与函数名之间有⼀个*

2.函数体内部使⽤yield表达式,定义不同的内部状态,产生一个阻塞的作用

3.yield表达式只能在 Generator 函数⾥使⽤,在其他地⽅会报错

4.yield 表达式后⾯的表达式,只有当调⽤ next ⽅法、内部指针指向该语句时才会执⾏,因此等于为 JavaScript 提供了⼿动的“惰性求值”(Lazy Evaluation)的语法功能

5.由于 Generator 函数返回的遍历器对象,只有调⽤ next ⽅法才会遍历下⼀个内部状态,所以其实提供了⼀种可以暂停执⾏的函数。

看下面的打印结果
在这里插入图片描述
作为一个普通的函数,这个hw打印的结果是return的值,但是Generator函数打印出来的不是这样,是一个生成器的对象

想要拿到每一行的状态,也就是每一个yeild的值,必须调用next()方法
在这里插入图片描述
我们可以看到没执行一次next(),就会执行一次,done是一个布尔值,当done的值是false的时候,说明Generator函数没有执行完。
我们可以看到上述打印的值,1,2打印的done值都是false,3打印的done值是true,说明执行3的时候,Generator函数已经执行完了,也就是当前遍历结束了。4执行的value值是undefined,说明没有值。

猜你喜欢

转载自blog.csdn.net/x_XDGS/article/details/118712054