发现scala类型不匹配未来[A]预期未来[B]
对scala来说有点陌生,这里的类型定义和解决方法有些混乱发现scala类型不匹配未来[A]预期未来[B],scala,future,Scala,Future,对scala来说有点陌生,这里的类型定义和解决方法有些混乱 private def getContract(organizationId: String, sc: SecurityContext): Future[Contract] = { val configRequest = ConfigsActor.ReadConfigRequest(CONFIG_KEY, Option(organizationId))(sc) (configActor ? configRequest
private def getContract(organizationId: String, sc: SecurityContext): Future[Contract] = {
val configRequest = ConfigsActor.ReadConfigRequest(CONFIG_KEY, Option(organizationId))(sc)
(configActor ? configRequest).mapTo[Config] andThen {
case Success(config) =>
JsonUtil.extract[Contract](config.data)
case otherwise =>
log.warning("some unknown case has happened", otherwise)
}
}
我希望akka ask返回结果,将其映射到配置。在my and子句中,将其转换为合同类型并返回
但我有一个类型不匹配
[error]
[error] found : scala.concurrent.Future[com.example.service.Config]
[error] required: scala.concurrent.Future[com.example.service.Contract]
[error] (configActor ? configRequest).mapTo[Config] andThen
[error]
设计用于执行副作用,而不会在未来改变价值。要转换未来
中的值,只需映射未来即可
(configActor ? configRequest).mapTo[Config] map { config =>
JsonUtil.extract[Contract](config.data)
} andThen { case Failure(e) => log.warning("some unknown case has happened", e) }
以下是值得记住的
someFuture
.map { value => /* transform value */ }
.recover { error => /* transform error */ }
.andThen { /* execute side-effect */
case Success(value) => logger.info("Successfully ...")
case Failure(error) => logger.error("Failed to ...", error)
}
你可以把和看作是未来的s。被设计成执行一个副作用,而不在未来转换价值。要转换未来
中的值,只需映射未来即可
(configActor ? configRequest).mapTo[Config] map { config =>
JsonUtil.extract[Contract](config.data)
} andThen { case Failure(e) => log.warning("some unknown case has happened", e) }
以下是值得记住的
someFuture
.map { value => /* transform value */ }
.recover { error => /* transform error */ }
.andThen { /* execute side-effect */
case Success(value) => logger.info("Successfully ...")
case Failure(error) => logger.error("Failed to ...", error)
}
你可以考虑,然后
至于未来
s.哦,有趣,好吧,让我试试。谢谢谢谢你的回答,所以如果将来发生错误,map不会被调用,它会被恢复吗?@Pita是的,映射成功也是其他错误单子的常见模式,如任选一、选项、尝试等。哦,有趣,好吧,让我试试。谢谢谢谢你的回答,所以如果将来发生错误,map将不会被调用,它将被恢复?@Pita是的,映射到成功也是其他错误monad的常见模式,如任选、Option、Try等。