我有一个异步调用,在其中的回调侦听器中我放入了emitter.onNext()。此异步调用位于for-in内(我知道列表大小)。我想在onNext()中发出最后一个元素时调用onComplete()。
for (anItem in itemList) {
eventsQuery.get()
.addOnCompleteListener { task ->
if (task.isComplete) {
emitter.onNext(myItemFromTask)
if(count == itemList.size){
emitter.onComplete()
}
}
}
}由于它是异步调用,因此计数不会以正确的方式递增,并且永远不会调用onComplete()。
处理这种情况的正确方法是什么?我需要onComplete来显示视图并移除加载/进度条。
发布于 2018-09-03 05:57:46
我找到了一个解决方案。
使用AtomicInteger,如下所示:
var counter = AtomicInteger(0)
for (anItem in itemList) {
eventsQuery.get()
.addOnCompleteListener { task ->
if (task.isComplete) {
counter.incrementAndGet()
emitter.onNext(myItemFromTask)
if(counter == itemList.size){
emitter.onComplete()
}
}
}
}如果有人能找到更好或更优雅的解决方案,我们将不胜感激!
https://stackoverflow.com/questions/52140160
复制相似问题