ValueEventListener { override fun onCancelled(databaseError: DatabaseError) { it.onError(RuntimeException(databaseError.message)) } override fun onDataChange(dataSnapshot: DataSnapshot) { it.onNext(ListEvent(dataSnapshot, ListEvent.LIST_LOADED, null)) } }) it.setCancellation { query.removeEventListener(listener) } }, AsyncEmitter.BackpressureMode.BUFFER) } #3 How to detect that a list loaded?