RxJS可以以拉动方式使用吗?

Rub*_*rgh 7 stream reactive-programming rxjs

RxJS README中示例似乎表明我们必须订阅源代码.换句话说:我们等待源发送事件.从这个意义上说,来源似乎是基于推送的:来源决定何时创建新项目.

然而,这与迭代器形成对比,严格来说,只需要在请求创建新项目,即在进行呼叫时next().这是pull-based行为,也称为懒惰生成.

例如,流可以返回所有维基百科页面的素数.这些项目仅在您要求时生成,因为预先生成所有项目都是一项投资,并且可能只有2或3项可能会被阅读.

RxJS是否也有这种基于拉的行为,因此只有在您要求时才生成新项目?

反压页似乎表明,这是不可能的呢.

pau*_*els 5

简短的回答是否定的。

RxJS是专为无功的应用程序,从而你已经提到的,如果你需要拉式的语义,你应该使用的Iterator,而不是一个ObservableObservables设计为迭代器的基于推送的对应物,因此它们在算法上确实占据了不同的空间。

显然,我不能说这永远不会发生,因为这是社区将决定的事情。但据我所知 1)这种情况的语义并不是那么好,2)这与对数据做出反应的想法背道而驰。

一个很好的概要可以在这里找到。它适用于 Rx.Net,但这些概念同样适用于 RxJS。

  • 谢谢——但是,这里有一个澄清:`Iterators` 仅适用于 _synchronous_ 基于拉取的场景。尽管有 [比较表](http://reactivex.io/intro.html),我不会将 `Observable` 称为 `Iterable` 的异步对应物,因为迭代器是基于拉取的,而 RxJS 对象是基于推送的. (2认同)