RxJava 2
我订阅了以下2个可观察项,它可以正常工作。我认为这不是最好的方法。
如果第一个getSalesInfo
符合条件,我只想订阅第二个getProductDetails
。这只是我正在尝试做的一个示例。如果不满足条件,则不会发生其他任何事情。
fun main(args: Array<String>) {
getProductDetails()
.subscribeBy { productDetails ->
if (productDetails.productID == 1234) {
getSalesInfo().subscribeBy {
getSalesInfo()
.subscribeBy { saleInfo ->
println(saleInfo.salesReference)
}
}
}
}
}
fun getProductDetails(): Observable<ProductDetails> =
Observable.just(ProductDetails(1234, "Product One"))
fun getSalesInfo(): Observable<SaleInfo> =
Observable.just(SaleInfo("Sales Reference 1"))
data class ProductDetails(val productID: Int,
val productDescription: String)
data class SaleInfo(val salesReference: String)
我发现的另一种替代方法是使用flatmap
,它将返回可观察到的第二个SaleInfo
。我必须在else条件不正确的情况下返回一个空的Observable。有更好的方法吗?
getProductDetails()
.flatMap { productDetails: ProductDetails ->
if (productDetails.productID == 1234) {
getSalesInfo()
}
else {
Observable.empty()
}
}
.subscribeBy { saleInfo ->
println("Using flatmap ${saleInfo.salesReference}")
}
非常感谢您的任何建议
答案 0 :(得分:2)
我建议您的第一种方法更好。它准确地描述了您要执行的操作,并具有以下优点:如果要在productID!= 1234时执行某些操作,则可以为执行的RX操作使用不同的回调。尽管它们基本上执行相同的操作,但是由于flatMap的原因,第二个可能会略有开销,并且还会降低灵活性。