我正在嘗試使用combine()組合 3 個流程,但沒有任何反應。這是我的代碼:
combine(flowX, flowY, flowZ) { x, y, z ->
println("$x, $y, $z") // this line is never reached
}
我知道我的流程很好,因為這很有效:
val x = flowX.first()
val y = flowY.first()
val z = flowZ.first()
println("$x, $y, $z") // this line is executed and prints the right values
為什么我的流量會發出first()但不會發出combine()?
uj5u.com熱心網友回復:
combine()不是終端流運營商。它只會創建一個新流并將其回傳,但不會開始收集流。您仍然需要收集流以實際開始執行它:
combine(flowX, flowY, flowZ) { x, y, z ->
println("$x, $y, $z")
}.collect {}
這個解決方案對我來說似乎有點奇怪,因為它列印在應該轉換值的 lambda 中,然后它回傳一個流Unit并收集什么都不做。或者,您可以這樣做:
combine(flowX, flowY, flowZ) { x, y, z -> Triple(x, y, z) }
.collect { (x, y, z) -> println("$x, $y, $z") }
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/523748.html
