vue技术学习es6 语法学习Vue.js

ES6基础教程(第十二节)——Generator函数

2019-07-08  本文已影响0人  多平方

今天来学点新玩意,Generator函数,Generator函数是一种特殊的函数,可以使用关键字 yield和 next()实现暂停和继续执行,而关键字yield*专门用于调用Generator函数,看似简单的特性,在实际开发中却有极大的用处。学习 Generator函数的前提是iterator遍历器,如果还不了解iterator遍历器的同学可以回看以前的教程。

Generator函数的中文名字叫生成器函数,是es6的一个重要新特性,我们来看个例子:

//声明一个Hello的Generator函数

function* Hello(name) {

yield `hello ${name}`;

yield `how are you`;

yield `bye`;

}

从例子中可以看出生成器函数有两个非常重要的区别:

1.普通函数用function来声明,Generator函数用function*声明;

2.Generator函数内部有新的关键字:yield,普通函数没有。

由此也会带来来个疑问:

1.Generator函数调用起来会发生声明;

2.关键字yield语句的作用是什么。

待着疑问我们来进一步探究 Generator函数:

//声明一个Hello的Generator函数

function* Hello(name) {

yield `hello ${name}`;

yield `how are you`;

yield `bye`;

}

//调用Hello函数

let ite = Hello('大佬');

//结果:[object Generator]

ite.next();

//{value: "hello 大佬", done: false}

ite.next();

//{value: "how are you", done: false}

ite.next();

//{value: "bye", done: false}

ite.next();

//{value: undefined, done: true}

如果是了解iterator遍历器的是不是很熟悉。

Generator函数被调用后得到的生成器理解成一个遍历器iterator,用于遍历函数内部的状态。

yield在这里起到了十分重要的作用,就相当于暂停执行并且返回信息。有点像传统函数的return的作用,但不同的是普通函数只能return一次,但是Generator函数可以有很多个yield。而return代表的是终止执行,yield代表的是暂停执行,后续通过调用生成器的 next()方法,可以恢复执行。

关键字yield*:

在一个Generator函数里面,如果我们想调用另一个Generator函数,就需要用到的关键字是:yield*。

来个栗子:

//声明Generator函数:gen1

function* gen1() {

yield "gen1 start";

yield "gen1 end";

}

//声明Generator函数:gen2

function* gen2() {

yield "gen2 start";

yield "gen2 end";

}

//声明Generator函数:start

function* start() {

yield "start";

yield* gen1();

yield* gen2();

yield "end";

}

//调用start函数

var ite = start();

//创建一个生成器

ite.next();

//{value: "start", done: false}

ite.next();

//{value: "gen1 start", done: false}

ite.next();

//{value: "gen1 end", done: false}

ite.next();

//{value: "gen2 start", done: false}

ite.next();

//{value: "gen2 end", done: false}

ite.next();

//{value: "end", done: false}

如果一个Generator函数A执行过程中,进入(调用)了另一个Generator函数B,那么会一直等到Generator函数B全部执行完毕后,才会返回Generator函数A继续执行。

综上所述:

以上就是对Generator函数的讲解介绍,它是ES6的一个很重要的新特性。它可以控制函数的内部状态,依次遍历每个状态;可以根据需要,轻松地让函数暂停执行或者继续执行。

根据这个特点,我们可以利用Generator函数来实现异步操作的效果。

原理是:利用Generator函数暂停执行的作用,可以将异步操作的语句写到yield后面,通过执行next方法进行回调。

公众号

上一篇下一篇

猜你喜欢

热点阅读