gpt4 book ai didi

scala - 如果不使用 future ,为什么会被要求理解?

转载 作者:行者123 更新时间:2023-12-04 19:56:25 28 4
gpt4 key购买 nike

我正在尝试实现一个将请求缓存到外部 API 的系统。如果响应在缓存中,则不应向外部站点发出请求。

我有两种方法:

// Check to see if the response is in the database
def checkCache(searchParameters: JsValue): Future[Option[JsValue]]

// Call the external API and get the JSON response
def getResponse(path: String): Future[JsValue]

然后我尝试执行以下操作:

val json: Future[JsValue] = for {
databaseJson <- checkCache(searchParameters)
externalJson <- getResponse(path)
} yield databaseJson match {
case None => externalJson
case Some(x) => x
}

这是有效的,但是一直向外部 API 发出请求,即使返回了缓存的结果也是如此。这显然不是我想要的,因为它很慢。

我该如何解决这个问题?

最佳答案

for comprehension 映射到 futures,而不是其中的 Option。你的代码会翻译成这个

checkCache(searchParameters) flatMap { databaseJson =>
getResponse(path) map { externalJson =>
databaseJson match {
case None => externalJson
case Some(x) => x
}
}
}

所以你显然总是在调用 getResponse()

你需要类似这样的东西(未经测试):

checkCache(searchParameters) flatMap { databaseJson =>
databaseJson match {
case None => getResponse(path)
case Some(x) => Future.successful(x)
}
}

关于scala - 如果不使用 future ,为什么会被要求理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053879/

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