tak*_*ala 2 scala reactive-programming monix
我正在使用 monix 任务,并且尝试捕获 Throwable,然后转换为自定义错误。我已删除/更改代码以使其简单且相关。这是代码(问题在代码片段后面):
import io.netty.handler.codec.http.HttpRequest
import monix.reactive.Observable
import io.netty.buffer.ByteBuf
import monix.eval.Task
import com.mypackage.Response
private[this] def handler(
request: HttpRequest,
body: Observable[ByteBuf]
): Task[Response] = {
val localPackage = for {
failfast <- Task.eval(1 / 0)
} yield failfast
// Failure case.
localPackage.onErrorRecoverWith {
case ex: ArithmeticException =>
print(s"LOG HERE^^^^^^^^^^^^^^^")
return Task.now(
Response(HttpResponseStatus.BAD_REQUEST,
None,
None)
)
}.runAsync
// Success case.
localPackage.map { x =>
x match {
case Right(cool) =>
Response(
HttpResponseStatus.OK,
None,
cool
)
case Left(doesntmatter) => ???
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以看到打印语句,但Task.now(Response(...没有返回预期的结果。相反,调用处理程序方法的方法会抛出错误。我如何让它返回Task[Response]?
成功的案例有效,失败的案例则无效。
编辑#1:修复 scala 代码中的错误。
编辑#2 这就是我修复它的方法。
// Success case.
localPackage.map { x =>
x match {
case Right(cool) =>
Response(
HttpResponseStatus.OK,
None,
cool
)
case Left(doesntmatter) => ???
}
}.onErrorRecoverWith {
case ex: ArithmeticException =>
print(s"LOG HERE^^^^^^^^^^^^^^^")
return Task.now(
Response(HttpResponseStatus.BAD_REQUEST,
None,
None)
)
}
Run Code Online (Sandbox Code Playgroud)
我在思考未来,忘记了lazy eval任务的本质。我还了解该CancellableFuture值是如何在失败任务中被丢弃的。
您的样品存在几个问题。
\n\n首先,此代码在 Scala 中无效:
\n\nval localPackage = for {\n failfast <- 1 / 0\n} yield failfast\nRun Code Online (Sandbox Code Playgroud)\n\n我猜你的意思Task.eval(1 / 0)是
也onErrorHandle没有 aTask作为返回类型,您可能正在考虑onErrorHandleWith. 给它一个部分函数(即一个可能因匹配错误而抛出异常的函数) \xe2\x80\x94 是一个非常糟糕的主意,如果你想匹配该错误,那么更好的选择是onErrorRecoverand onErrorRecoverWith,它采用部分函数作为参数。
这是一个示例:
\n\nimport monix.eval._\nimport monix.execution.Scheduler.Implicits.global\n\nval task = Task.eval(1 / 0).onErrorRecoverWith {\n case _: ArithmeticException => Task.now(Int.MinValue)\n}\n\ntask.runAsync.foreach(println)\n//=> -2147483648\nRun Code Online (Sandbox Code Playgroud)\n\n希望这可以帮助。
\n| 归档时间: |
|
| 查看次数: |
1465 次 |
| 最近记录: |