gpt4 book ai didi

scala - 如何连接两个 Scala Future

转载 作者:行者123 更新时间:2023-12-02 15:39:06 25 4
gpt4 key购买 nike

我有两个 Future 函数:

def parseIntFuture(str: String) = Future{scala.util.Try(str.toInt).toOption}
def divideFuture(a: Int, b: Int) = Future{ if (b == 0) None else Some(a / b)}

现在我想连接它们并最终得到一个 Future[Option[Int]] 类型结果,这是第二个的返回值,但如果我这样做:

def stringDivideBy(aStr: String, bStr: String) = {
val x = for {
aNum <- parseIntFuture(aStr)
bNum <- parseIntFuture(bStr)
} yield (aNum, bNum)

x.map(n => {
for{
a <- n._1
b <- n._2
} yield divideFuture(a, b)
})
}

实际上我只会得到 Future[Option[Future[Option[Int]]]] 而不是 Future[Option[Int]] 。我知道这是因为我将一个 Future 传递给另一个 Future,但我不知道将这两个 Future 一一连接的正确方法是什么,避免使用 Await。我明确停止使用 Await,那么解决方案是什么?

最佳答案

对于像这样的简单的东西,你不需要 monad 转换器和其他“重型火炮”。一般规则是不要使代码变得比实际需要的更复杂。

 (parseIntFuture(foo) zip parseIntFuture(bar))
.flatMap {
case (Some(a), Some(b)) => divideFuture(a, b)
case _ => Future.successful(None)
}

关于scala - 如何连接两个 Scala Future,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53872219/

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