简介
Generator函数是一个函数的内部状态的遍历器,也就是说,Generator函数是一个状态机
特征
function与函数名之间有个
*
号。函数体内使用yield语句,定义变利器的每个成员,即不同的内部状态。
function * helloGenerator(){
yield 'status01';
yield 'status02';
return 'ending'
}
next调用。调用
Generator
函数,返回一个部署Iterator接口的遍历对象,用来操作内部指针。会反悔一个有着 value和done两个属性的对象。value属性表示当前内部状态的值,done饰一个boolean值,表示是否遍历结束使用for of循环可以自动遍历generator函数,一旦next()方法返回的为true就会停止,且不包含该返回对象,如下的例子,6不会在for of遍历中
function *number(){
yield 1;
yield 2;
yield 3;
yield 4;
yield 5;
return 6
}
for(let item of number){
console.log(item)
}
//1,2,3,4,5,
说了这么多,generator在实际有什么作用呢
- 痛苦的回调
如果有个操作,需要调用更新接口,然后再调用接口2来计算总量,代码可能会写成这样
$.ajax({
success: function(data){
$.ajax({
success: function(data){
if(data&&data.code = 0){
alert('成功了')
}
}
})
}
})
现在有了generator了
function *2ajax(){
var value = yield (function(){})();
var value = yield (function(){})()
}
var ge = 2ajax();
ge.next()
ge.next()