调用 rpc 方法之间的功能
Functionalities between calling rpc methods
我试图改变 ZIO 的 example code 以适应我想要的,但是 运行 遇到了问题。我想在不同的 rpc 调用之间实现功能,但我似乎无法让它工作,因为在下面的示例中,只有 while 循环、rcpMethod3()
和 rcpMethod4()
被执行,而 rcpMethod1()
而 rcpMethod2()
没有。
我想执行所有 rcpMethod
和 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
}
}
ZIO
数据类型是函数效果。功能效果是对工作流程的描述。这就是为什么我们在世界尽头有 run
方法。此 运行 方法执行提供的 ZIO
效果。
所有rcpMethodN
方法都是ZIO
效果,所以它们只是对运行ning工作流程的描述。如果您想按顺序 运行 这些效果,您应该使用 for-comprehension
或 flatMap
组合它们,如下所示:
for {
_ <- rcpMethod1()
_ <- rcpMethod2()
_ <- rcpMethod3()
_ <- rcpMethod4()
} yield ()
while(condition){ ... }
是您代码中的另一个错误。您应该使用 ZIO
数据类型引入这些循环结构。例如:
for {
_ <- rcpMethod1()
_ <- rcpMethod2()
_ <- ZIO.effect(???).repeatWhile(condition)
_ <- rcpMethod3()
_ <- rcpMethod4()
} yield ()
我试图改变 ZIO 的 example code 以适应我想要的,但是 运行 遇到了问题。我想在不同的 rpc 调用之间实现功能,但我似乎无法让它工作,因为在下面的示例中,只有 while 循环、rcpMethod3()
和 rcpMethod4()
被执行,而 rcpMethod1()
而 rcpMethod2()
没有。
我想执行所有 rcpMethod
和 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
}
}
ZIO
数据类型是函数效果。功能效果是对工作流程的描述。这就是为什么我们在世界尽头有 run
方法。此 运行 方法执行提供的 ZIO
效果。
所有rcpMethodN
方法都是ZIO
效果,所以它们只是对运行ning工作流程的描述。如果您想按顺序 运行 这些效果,您应该使用 for-comprehension
或 flatMap
组合它们,如下所示:
for {
_ <- rcpMethod1()
_ <- rcpMethod2()
_ <- rcpMethod3()
_ <- rcpMethod4()
} yield ()
while(condition){ ... }
是您代码中的另一个错误。您应该使用 ZIO
数据类型引入这些循环结构。例如:
for {
_ <- rcpMethod1()
_ <- rcpMethod2()
_ <- ZIO.effect(???).repeatWhile(condition)
_ <- rcpMethod3()
_ <- rcpMethod4()
} yield ()