是什么
- generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次。
- generator和函数不同的是,generator由function定义(注意多出的号),并且,除了return语句,还可以用yield返回多次。
- 生成器函数需要 next() 方法才能执行
- 生成器函数遇到 yield 即停
function *test () {
console.log('111')
var a = yield '111-输出';
console.log('222', a)
var b = yield '222-输出';
console.log('333', b)
var c = yield '333-输出';
console.log(c)
}
test()
var newTest = test()
var test1 = newTest.next()
console.log(test1);
var test2 = newTest.next('A')
console.log(test2);
var test3 = newTest.next('B')
console.log(test3);
var test4 = newTest.next('C')
console.log(test4);

generator 函数演示
可执行生成器

可执行生成器
function getData1(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("data1")
},1000)
})
}
function getData2(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("data2")
},1000)
})
}
function getData3(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("data3")
},1000)
})
}
function *gen(){
var f1 = yield getData1();
console.log(f1)
var f2 = yield getData2(f1);
console.log(f2)
var f3 =yield getData3(f2)
console.log(f3)
}
function run(fn){
var g = fn()
function next(data){
var result= g.next(data);
if(result.done){
return result.value
}
result.value.then(res=>{
next(res)
})
}
next()
// g.next()
}
run(gen)