假设我有一个数组项
我知道我可以使用这个数组创建一个 observable
Rx.Observable.fromArray(items)
如何从中创建一个惰性无限重复的可观察对象(即:只要请求它们就重复这些项目)?
试过了
Rx.Observable.fromArray(items).repeat()
但这不会延迟执行,因此会锁定浏览器。
假设我有一个数组项
我知道我可以使用这个数组创建一个 observable
Rx.Observable.fromArray(items)
如何从中创建一个惰性无限重复的可观察对象(即:只要请求它们就重复这些项目)?
试过了
Rx.Observable.fromArray(items).repeat()
但这不会延迟执行,因此会锁定浏览器。
你不能用 Observable 做到这一点。你想看看使用 Enumerable。
Reactive Extensions 的 Enumerable 风格被称为 Interective Extensions。
我仍然是 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?