当 emitter.onNext() 处于异步循环时如何调用 emitter.onComplete()



我有一个异步调用,我已经在其中放置了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 来显示视图并删除加载/进度条。

我找到了解决方案。

使用 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()
}
}
}
}

如果有人找到更好或更优雅的解决方案,将不胜感激!

最新更新