【发布时间】:2015-04-05 07:18:38
【问题描述】:
我已多次阅读有关 Scala Futures 减少回调问题的文章。我的代码开始出现问题。
val a = Future(Option(Future(Option(10))))
a.map { b =>
b.map { c =>
c.map { d =>
d.map { res =>
res + 10
}
}
}
}
如何使这段代码更扁平?
//编辑@againstmethod
for{
b <- a
c <- b
d <- c
res <- d
} yield res + 10
这段代码不会编译
错误:(21, 8) 类型不匹配;找到:Option[Int] 必需:
scala.concurrent.Future[?] res ^
【问题讨论】:
-
如果您想出了一个在将其粘贴到 IDE 时实际编译的示例,那么提出改进建议可能会更容易...
-
@KimStebel 刚刚改了代码,所以更通用
-
您首先应该避免堆叠
Future,使用Future.traverse或Future.sequence。 -
没有人会写出像这样的真实代码。最好尝试一些实际上可能是真实的东西,然后用那个例子来询问你不理解的部分。
-
这是我必须处理的代码的简化版本。而且它几乎是使用 reactivemongo 的未经修改的示例,所以是的,人们确实会编写这样的代码。