Generator函数的声明
function* fn() {
console.log('我是生成器函数')
yield '我是生成器函数2'
console.log('我是生成器函数3')
yield '我是生成器函数4'
}
//调用生成器函数需要.next()
fn().next()
let item = fn()
//返回一个generator对象,对象的原型上有一个next(),调用返回对象{value:yield后面的值, done}
console.log(item)
console.log(item.next())
console.log(item.next())
item.next()
yield和return的区别:
- yield: 暂停执行,调用next()继续执行
- return:结束执行
next() 方法还可以接受一个参数,它的参数会作为上一个yield的返回值
function* demo() {
let res = yield '我是1'
console.log(res)
let res_1 = yield res
console.log(res_1)
}
let ite = demo()
console.log(ite.next())
console.log(ite.next('我是参数'))
ite.next('我是参数1')
在一个Generator函数里面,如果我们想调用另一个Generator函数,就需要用到关键字yield*
function* fn_1() {
console.log('fn_1')
}
function* fn_2() {
console.log('fn_2')
}
function* fn_3() {
console.log('fn_3')
}
function* fn_4() {
yield* fn_1()
yield* fn_2()
yield* fn_3()
}
let it = fn_4()
it.next()