我有以下代码从集合中发出项目。
// fills the given coll with some items and
// returns the observable emitting the filled collection
// does ASYNC work
Observable<Collection> generate(Collection coll){ ... }
def coll = []
generate(coll).flatMap({ filledColl ->
rx.Observable.from(filledColl)
}).subscribe({ ... })
问题是这个集合可以包含数千个项目,并且由于generate
工作异步,这个代码会导致订阅方法几乎立即被调用数千次(这对我的工作来说是不可取的。在观察者内部做。)
如何修改此代码以延迟从集合中发出项目? 例如:发出100个项目然后等待100ms然后再发出100个项目或等待10ms然后再发出下一个项目?
答案 0 :(得分:2)
在flatMap中,你需要将filledColl
拆分成更小的部分,延迟每个部分,并将它们全部合并到一个observable中,你将在flatMap内返回。
generate(coll).flatMap({ filledColl ->
def chunkSize = 100
resultStream = rx.Observable.never()
for (i in 0 ..< filledCol.size()/chunkSize) {
def chunk = filledCol[i*chunkSize .. (i+1)*chunkSize]
resultStream = resultStream.mergeWith(
rx.Observable.from(chunk).delay(100*i, TimeUnit.MILLISECONDS)
)
}
resultStream
}).subscribe({ ... })
这只是一个粗略的想法,你可能仍然想根据你的需要进行测试,调整和纠正。此外,将它移动到generate函数可能更有意义,但这取决于你,因为我不知道generate()中有什么。