ES6 Generator函数
1、该函数是一个状态机,内部封装不同状态的数据
2、用来生成并返回一个遍历器对象,必须通过该遍历器对象.next()执行函数
3、可暂停函数,yield暂停,next启动,返回yield之后的表达式结果
4、可以让异步任务按同步方式进行,如ajax请求
特点:
1、function *函数名(..){..};
2、内部用yield表达式来定义不同状态
3、通过返回的遍历器对象来执行函数
4、执行过程遇到yield,暂停函数,并返回一个包含yield后面的语句或表达式结果的值,和是否结束的布尔值;{value:..,done:..布尔值}
5、通过遍历器.next()继续执行函数后面的内容
6、最后一个yield返回后,再后面一个返回的对象value值是return内的值
7、遍历器对象.next(传入值);传入值可作为上一个yield的返回值,因为.next()调用是在上一个yield处调用
代码示例:
<html ng-app='app' ng-controller='main' >
<head>
<meta charset="utf-8">
<meta name='viewport' content='width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0'>
<script src='jq/jquery-3.4.1.js'></script>
<style>
</style>
</head>
<body >
<script>
function *fun()
{
console.log('开始');
let call=yield 'hello';
console.log(call);
console.log('过程');
yield 'generator';
console.log('结束');
return '结束';
}
let ite=fun();//返回遍历器对象
console.log(ite.next());
console.log(ite.next('返回值'));
console.log(ite.next());
</script>
</body>
</html>