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
. Я должен вернуть пустой Observable в состоянии else, которое выглядит неправильно. Есть ли лучший способ?
getProductDetails()
.flatMap { productDetails: ProductDetails ->
if (productDetails.productID == 1234) {
getSalesInfo()
}
else {
Observable.empty()
}
}
.subscribeBy { saleInfo ->
println("Using flatmap ${saleInfo.salesReference}")
}
Большое спасибо за любые предложения