gpt4 book ai didi

scala - 在 Future 的 flatMap 中抛出异常?

转载 作者:行者123 更新时间:2023-12-01 10:00:31 25 4
gpt4 key购买 nike

给定:

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future

scala> Future(5).flatMap(_ => throw new Exception("!") )
res9: scala.concurrent.Future[Nothing] = Future(<not completed>)

scala> res9.value
res10: Option[scala.util.Try[Nothing]] = Some(Failure(java.lang.Exception: !))

为什么在 Future#flatMap 中抛出异常会返回失败的 future ?

鉴于其 signature :

def flatMap[S](f: (T) ⇒ Future[S])
(implicit executor: ExecutionContext): Future[S]

_ => throw ... 如何返回一个 Future

最佳答案

嗯,首先flatMap映射接收 future 的结果,因此它立即返回另一个 future (因此不会立即捕获异常!)。传递给 flatMap 的函数采用前一个 future 的结果,必须产生另一个 future 。抛出异常的类型为 Nothing这是任何其他类型的子类型,满足 Nothing <: Future[A]其中 A推断为 Nothing

从scala.concurrent来看,flatMap(e => (throw new Exception()): Future[A])flatMap(e => Future[A](throw new Exception())必须一视同仁,只有一个合乎逻辑的解决方案,返回一个失败的 future 。

关于scala - 在 Future 的 flatMap 中抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35051127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com