如何从无限生成器创建有限长度生成器

How to create a finite length generator from an infinite generator

所以我有一个 javascript 生成器(如下),它会无限地生成随机数。

function* createRandomNumberStream(): IterableIterator<number> {
  while (true) {
    yield Math.random()
  }
}

我如何编写类型为 (it: Iterable<T>, n: number) => Iterable<T> 的生成器函数,其中 returns 一个新的可迭代对象,它在 n 产生后结束?

请注意 createRandomStream() 生成器并不是真正相关的,它只是一个无休止的可迭代生成器的示例。我正在尝试制作一个基本上对可迭代对象进行切片的生成器。

这是你想要的吗?

function* createRandomNumberStream() {
    while (true) {
        yield Math.random()
    }
}

function* take<T>(it: Iterator<T>, count: number) {
    let currentCount = 0
    while (currentCount++ < count) {
        yield it.next().value
    }
}

const stream = take(createRandomNumberStream(), 3)

for (const num of stream) {
    console.log(num)
}