我通过调用Observable.create
来创建一个可观察对象。只要有订阅者,我就想保持它的生命。在这种情况下,setCancellable
在我看来是唯一可以调用onComplete()
的地方,还是应该完全调用它?
val data: Observable<Data>
get() = Observable.create { emitter ->
val ref = mDatabase.child("users").child("data")
val listener = ref.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
emitter.onError(p0.toException())
}
override fun onDataChange(p0: DataSnapshot) {
Data.parse(p0)?.let { emitter.onNext(it) }
}
})
emitter.setCancellable {
emitter.onComplete() // ???
ref.removeEventListener(listener)
}
}