0

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

4

1 回答 1

0

我找到了解决方案。

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

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

于 2018-09-02T21:57:45.673 回答