我只是在学习 Mutiny,我需要实现重试逻辑。
我有这个代码:
fun main() {
getResult()
.onFailure().invoke { t -> println("Got error: $t") }
.onFailure().retry().atMost(2)
.subscribe().with(
{ result -> println(result) },
{ t -> t.printStackTrace() }
)
}
fun getResult(): Uni<String?> {
println("Preparing result...")
return Uni.createFrom().failure(Exception("Some error happened"))
}
因此,这getResult()
是一个可能行为不端的函数,需要在失败时多次调用。
当我运行这个程序时,这就是发生的事情:
Preparing result...
Got error: java.lang.Exception: Some error happened
Got error: java.lang.Exception: Some error happened
Got error: java.lang.Exception: Some error happened
java.lang.Exception: Some error happened
at MainKt.getResult(Main.kt:16)
at MainKt.main(Main.kt:4)
显然,该getResult()
函数只调用了一次,而各个onFailure()
阶段实际上执行了 3 次。
Mutiny 有什么可以帮助我getResult()
在每次失败时执行功能的吗?我当然可以用一个简单的循环来实现它,但我觉得 Mutiny 应该已经有了这样的东西。
不幸的是,我在文档中没有找到任何合适的东西。