首页 > 解决方案 > 如何从无限生成器创建有限长度生成器

问题描述

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

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

如何使用 type 编写生成器函数(it: Iterable<T>, n: number) => Iterable<T>,它返回一个在 n 产生后结束的新迭代?

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

标签: javascripttypescriptyielditerable

解决方案


这是你想要的吗?

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)
}

推荐阅读