js生成器迭代器

clipboard.png
为什么会出现两个6.5???

clipboard.png
注释一个b().next()后就是一个6.5;为社么第二个next()会导致console.log(6.5)再次执行??怎么理解这个问题??

阅读 1.8k
2 个回答

你把计时器改成普通函数试试

每次调用生成器函数都会生成一个新的迭代器,你调用了两次b(),所以生成了两个新的迭代器,每个新的迭代器都是没有关联,独立执行的。你的意思可能是想执行同一个迭代器两次吧,而不是生成两个迭代器,分别都执行一次:

function a () {
  function * b () {
    yield setTimeout(() => {
      console.log(6.5)
    }, 5000)
    yield 2
  }
  let iterator = b()
  iterator.next()
  iterator.next()
}
a()

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题