gpt4 book ai didi

Scala:根据另一个有条件地执行一个 Future 的最惯用方式?

转载 作者:行者123 更新时间:2023-12-04 17:54:30 25 4
gpt4 key购买 nike

执行以下操作的最惯用和最简洁的方法是什么:一个 future 可能会或可能不会执行,这取决于先前 future 执行的结果或结果,如下所示:

def getItFromHere : Future[Option[Something]] = ...

def getItFromThere : Future[Option[Something]] = ...

def getIt : Future[Option[Something]] = {

for {
maybeSomething <- getItFromHere
probablySomething <- maybeSomething.getOrElse(getItFromThere) // Obviously can't be done!!!
}
yield probablySomething
}

一个特定的用例示例:从缓存中获取一个项目,只有在缓存中没有找到它时,才从数据库中获取它。

我在这里假设 getItFromHeregetItFromThere 不会因异常而失败。他们将返回 Some[Something] 或 None。随意考虑这个假设,或者在没有它的情况下给出更好的结果。

注意:我理解 for-comprehension 的内部机制,它实际上在内部翻译为 map/flatMap/filter。

最佳答案

如果在缓存中找不到任何项目,您可能会在未来失败,然后通过检索恢复它。

// assuming getItFromHere() fails if no item is found
getItFromHere() recoverWith { case _ => getItFromThere() }

或者使用 Option 你可以这样做:

getItFromHere() flatMap {
case Some(x) => Future.successful(Some(x))
case None => getItFromThere()
}

关于Scala:根据另一个有条件地执行一个 Future 的最惯用方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23883177/

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