在 onDispose 期间对 RxJava 链中的对象执行操作
Perform action on object in the RxJava chain during onDispose
我有一个像这样的 RxJava 链:
Single.timer(500, TimeUnit.MILLISECONDS)
.map { createMyObject() }
.doOnDispose {
// how to access MyObject here? I want to call:
myObject.dismiss()
}
.subscribe { myObject ->
// do something with myObject
}
但是,.doOnDispose
需要一个 Action
而不是 Consumer
,所以我无法访问其中先前映射的 myObject
。
我现在正在做的是在 Rx 链之外有一个外部可空变量来保存对象:
var myObject: MyObject? = null
Single.timer(500, TimeUnit.MILLISECONDS)
.map {
myObject = createMyObject()
return@map myObject
}
.doOnDispose {
myObject?.dismiss()
}
.subscribe { myObject ->
// do something with myObject
}
但我不喜欢将它暴露在链外的想法。有更好的方法吗?
您可能应该使用 Single.using
在适当的时候正确处理处置操作
类似于
Single.using({createMyObject()}, {something(it)}, {it.dismiss}).subscribe{...}
我有一个像这样的 RxJava 链:
Single.timer(500, TimeUnit.MILLISECONDS)
.map { createMyObject() }
.doOnDispose {
// how to access MyObject here? I want to call:
myObject.dismiss()
}
.subscribe { myObject ->
// do something with myObject
}
但是,.doOnDispose
需要一个 Action
而不是 Consumer
,所以我无法访问其中先前映射的 myObject
。
我现在正在做的是在 Rx 链之外有一个外部可空变量来保存对象:
var myObject: MyObject? = null
Single.timer(500, TimeUnit.MILLISECONDS)
.map {
myObject = createMyObject()
return@map myObject
}
.doOnDispose {
myObject?.dismiss()
}
.subscribe { myObject ->
// do something with myObject
}
但我不喜欢将它暴露在链外的想法。有更好的方法吗?
您可能应该使用 Single.using
在适当的时候正确处理处置操作
类似于
Single.using({createMyObject()}, {something(it)}, {it.dismiss}).subscribe{...}