我試圖改變 ZIO 的示例代碼以適應我想要的,但遇到了一個問題。我想實作不同的RPC呼叫之間的功能,但我似乎無法得到它的作業,因為在下面的例子中,只有while回圈,rcpMethod3()
并rcpMethod4()
得到執行,而rcpMethod1()
并rcpMethod2()
沒有。
我想執行所有的rcpMethod
s 和 while 回圈。
object Client extends App {
val clientLayer: Layer[Throwable, ClientZLayer] =
ClientZLayer.live(
ZManagedChannel(
ManagedChannelBuilder.forAddress("localhost", 8980).usePlaintext()
)
)
// rcp methods
def rcpMethod1(): ZIO[ClientZLayer with Console, Status, Unit] = {
for {
response <- ClientZLayer.rcpMethod1(Greeting("Hi"))
_ <- putStrLn(s"""Greeted: "${response.name}".""")
} yield ()
}
// Run the code
final def run(args: List[String]) = {
(for {
_ <- rcpMethod1()
_ <- rcpMethod2()
} yield ()).provideCustomLayer(clientLayer).exitCode
while(condition) {
// bla bla
}
(for {
_ <- rcpMethod3()
_ <- rcpMethod4()
} yield ()).provideCustomLayer(clientLayer).exitCode
}
}
uj5u.com熱心網友回復:
的ZIO
資料型別是一種功能性效果。功能效果是對作業流程的描述。這就是為什么我們有run
世界末日的方法。此 run 方法執行提供的ZIO
效果。
所有的rcpMethodN
方法都是ZIO
生效的,所以它們只是對運行作業流的描述。如果您想按順序運行這些效果,您應該使用for-comprehension
或flatMap
像這樣組合它們:
for {
_ <- rcpMethod1()
_ <- rcpMethod2()
_ <- rcpMethod3()
_ <- rcpMethod4()
} yield ()
這while(condition){ ... }
是您代碼中的另一個錯誤。您應該使用ZIO
資料型別引入這些回圈結構。例如:
for {
_ <- rcpMethod1()
_ <- rcpMethod2()
_ <- ZIO.effect(???).repeatWhile(condition)
_ <- rcpMethod3()
_ <- rcpMethod4()
} yield ()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372710.html