【问题标题】:How can data be provided to a running generator?如何将数据提供给正在运行的生成器?
【发布时间】:2019-06-20 14:15:25
【问题描述】:

我想为正在运行的生成器提供数据。

这只是 JavaScript 代码,代码本身可以运行任何浏览器控制台。

function* getNumbers() {
  yield 1
  yield 5
  yield 10
}
// retrieving
const getThoseNumbers = getNumbers()
console.log(getThoseNumbers.set())
console.log(getThoseNumbers.update())

我希望下一个 yield 值像 5 或 10。 但我收到以下错误消息

  • TypeError:getThoseNumbers.set 不是函数

  • TypeError:getThoseNumbers.update 不是函数

【问题讨论】:

  • 你为什么期望generators 拥有setupdate
  • 如果您期望下一个产生的值,使用.next() 方法?但这从生成器获取数据,而不是向生成器提供数据。我不知道你打算set update 做什么。
  • 如果你真的想“向生成器提供数据”,你实际上可以在调用 next 来修改一些内部状态时提供一个值。 Here's a MDN article on it。在底部有一个关于高级生成器的部分。

标签: javascript generator


【解决方案1】:

function* getNumbers() {
  yield 1
  yield 5
  yield 10
}
// retrieving
const getThoseNumbers = getNumbers()
// console.log(getThoseNumbers.set()) - Uncaught TypeError: getThoseNumbers.set is not a function
// console.log(getThoseNumbers.update()) - Uncaught TypeError: getThoseNumbers.update is not a function

// You should call `next()`
console.log(getThoseNumbers.next()) // 1
console.log(getThoseNumbers.next()) // 5
console.log(getThoseNumbers.next()) // 10

您应该致电next,这是您获得下一个生成器的方式。

【讨论】:

  • next() 不会返回纯数字
  • 我知道。如果您运行code snippet,您将看到next() 返回的内容
【解决方案2】:

迭代器(就像您在调用生成器函数时创建的那个)具有一个用于获取下一个值的属性:nextnext 是一种继续生成器直到下一次 yield 或 return 的方法,并返回对象中产生或返回的任何值。返回对象有两个属性:valuedonedone 是一个布尔值,在生成器完成后变为真。

请注意,这些都不是setupdate

【讨论】:

  • 不,生成器有方法nextthrowreturn。它没有 done 属性。
  • 是的,对不起,我解释得不好。我编辑了我的帖子以尝试澄清。
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 2013-03-29
相关资源
最近更新 更多