【发布时间】:2015-11-11 22:47:47
【问题描述】:
examples in the RxJS README 似乎暗示我们必须订阅来源。换句话说:我们等待源发送事件。从这个意义上说,来源似乎是基于推送的:来源决定何时创建新项目。
然而,这与迭代器形成鲜明对比,迭代器严格来说只有在请求时才需要创建新项目,即当调用next() 时。这是pull-based 行为,也称为 lazy 生成。
例如,一个流可以返回所有 Wikipedia 页面的素数。这些项目仅在您要求时才会生成,因为预先生成所有这些项目是一项相当大的投资,而且可能只读取其中的 2 或 3 个。
RxJS 是否也可以具有这种基于拉取的行为,以便仅在您请求时才生成新项目?
page on backpressure 似乎表明这还不可能。
【问题讨论】:
-
我会让专家回答,但只是一个简短的说明。调用
next并不意味着新项目仅在您说的必要时创建,它只是意味着当时请求它们(并且作为迭代器同步提供)。典型的例子是基于数组的迭代器。在调用迭代器枚举其值之前,数组(以及其中的值)已经存在。实际上,您可以将数组视为保存值的缓冲区,而您的next运算符的作用就像带有request(1)的受控 Rx.Observable。 -
完全正确——我稍微改写了措辞以反映这一点。但是,我不会说迭代器通常基于数组。更有趣的用例是迭代器不是基于数组的。
标签: stream reactive-programming rxjs