1、generator 是可以用来控制迭代器的函数,它主要的方法有以下三个:
2、基本使用
常规的遍历,会一次性遍历输出所有的值,但是使用了 generator 生成器,我们可以使用 next()函数,得到每次遍历的结果,使得遍历变得可控制。如下代码,第一次通过 l.next() 得到 1,第二次得到2,第三次 for 循环遍历结束,便不再输出,返回 {value: undefined, done: true}
function * loop () {
for (let i = 0; i < 2; i++) {
yield console.log(i)
}
}
const l = loop()
l.next() // 1 {value: undefined, done: false}
l.next() // 2 {value: undefined, done: false}
l.next() // {value: undefined, done: true}
3、yield
function * gen () {
let val
val = yield 1
console.log(`1:${val}`) // 1:undefined
val = yield 2
console.log(`2:${val}`) // 2:undefined
val = yield 3
console.log(`3:${val}`) // 3:undefined
}
var g = gen()
console.log(g.next()) // {value: 1, done: false}
console.log(g.next()) // {value: 2, done: false}
console.log(g.next()) // {value: 3, done: false}
console.log(g.next()) // {value: undefined, done: true}
4、next
function * gen () {
var val = 100
while (true) {
val = yield val
}
}
var g = gen()
console.log(g.next(20).value) // 100
console.log(g.next(30).value) // 30
console.log(g.next(40).value) // 40
5、return
function * gen () {
yield 1
yield 2
yield 3
}
var g = gen()
console.log(g.next()) // {value: 1, done: false}
console.log(g.return(100)) // {value: 100, done: true}
console.log(g.next()) // {value: undefined, done: true}
6、throw
function * gen () {
while (true) {
try {
yield 1
} catch (e) {
console.log(e.message)
return false
}
}
}
let g = gen()
console.log(g.next()) // { value: 1, done: false }
console.log(g.next()) // { value: 1, done: false }
console.log(g.next()) // { value: 1, done: false }
// 中断操作
g.throw(new Error('error'))
console.log(g.next()) // {value: undefined, done: true}
7、使用 generator 函数注意事项
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。