从数组创建无限可重复的Observable

时间:2014-09-17 14:57:34

标签: reactive-programming rxjs reactive-extensions-js

假设我有一个数组项目

我知道我可以使用

从这个数组中创建一个observable
Rx.Observable.fromArray(items)

如何从中创建一个懒惰的无限重复的观察者(即:只要他们被请求就重复这些项目)?

尝试

Rx.Observable.fromArray(items).repeat()

但这并不是懒惰地执行,因此会锁定浏览器。

2 个答案:

答案 0 :(得分:0)

你不能用Observable做到这一点。你想看看使用Enumerable。

Reactive Extensions的Enumerable风格被称为Interective Extensions。

答案 1 :(得分:0)

我仍然是RxJS的新手,所以也许我提出的是完全疯狂,但是可能会出现以下工作:

var items = [1, 2, 3, 4, 5];

var infiniteSource = Rx.Observable.from(items)
  .map(function (x) { return Rx.Observable.return(x).delay(1000); })
  .concatAll()
  .doWhile(function(_) { return true; /* i.e. never end */ });

infiniteSource.subscribe(function(x) { console.log(x); });

我在这里有一个例子:http://ctrlplusb.jsbin.com/sihewo/edit?js,console

延迟放在那里,以免淹没控制台。就“直到不再需要的部分”而言,也许可以在doWhile中注入取消订阅或其他机制?