【发布时间】:2015-02-25 19:45:16
【问题描述】:
假设我有一个返回 Future 的函数,根据这个函数的结果,我可能需要再次调用它,或者我可能会立即返回。我需要将这些结果累积在一个列表中。我想定义一个将这个列表作为 Future 返回的函数。我有以下内容:
def foo: Future[Int] { ... }
def accum(i: Future[Int], l: List[Int]): Future[List[Int]] = i.map { i =>
if (i >= max)
l
else
accum(foo, i :: l)
}
def test: Future[List[Int]] = accum(foo, List())
但这当然不会编译,因为在映射中调用 accum() 需要返回 List[Int] 而不是 Future[List[Int]]。这样做的正确方法是什么?
【问题讨论】: