4

假设我有一个数组

我知道我可以使用这个数组创建一个 observable

Rx.Observable.fromArray(items)

如何从中创建一个惰性无限重复的可观察对象(即:只要请求它们就重复这些项目)?

试过了

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

但这不会延迟执行,因此会锁定浏览器。

4

2 回答 2

1

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

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

于 2014-09-18T08:23:43.620 回答
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?

于 2016-01-28T20:47:13.600 回答