function *generator(){
var a = yield 1;
console.log(a) //100
var b = yield 2;
console.log(b) // undefined
return 3
}
//第一次调用返回执行器
let gen = generator()
// next函数返回一个对象,value表示yeild后表达式的值,done表示函数执行状态
console.log('第一次调用',gen.next())
// yeild后表达式的返回值等于下一次调用next执行器传入的值
console.log('第二次调用',gen.next(100)) //{value:2,done:false}
console.log('第三次调用',gen.next()) //{value:3,done:true}
封装generator
function run(generator){
let gen = generator()
function next(data){
// 调用next获取jenerator函数的执行状态
let result=gen.next(data)
//判断generator函数是否执行完
if(result.done){
return result.value
}else{
//判断yeild后面是否是promise
if(result.value.then){
result.value.then(res=>next(res))
}esle{
next(result.value)
}
}
}
next()
}
console.log(run(generrator))