def searchUsers(query: String): Future[Seq[User]] = {
var queryStrings: Array[String] = query.split(" ")
var users = ArrayBuffer[User]()
queryStrings.map(Users.search(_))
}
也许有人可以帮助我
干杯
更新
抱歉,我的问题并非如此。 我的问题是我希望返回值为Future [Seq [User]],并且由于query.split(我必须映射它),它是Array [Future [Seq [User]]]错误是 类型Array [Future [Seq [User]]]的表达式不符合预期类型Future [Seq [User]]
答案 0 :(得分:4)
为了展平Array[Future[Seq[User]]
,我们可以先使用Future.sequence
获取Future[Array[Seq[User]]
,然后展平它以获得Future[Seq[User]]
:
Future
.sequence[Seq[User], Seq](queryStrings.map(Users.search))
.map(_.flatten)
答案 1 :(得分:0)
我不喜欢我的答案中的x.toList
,但发布以显示Future#traverse的用法:
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
def f[A, B](x: Array[A], f: A => Future[Seq[B]]): Future[Seq[B]] =
Future.traverse[A, Seq[B], Seq](x.toList)(f).map(_.flatten)
scala> f( Array(1,2,3), { x: Int => Future.successful(List(x)) } )
res2: scala.concurrent.Future[Seq[Int]] = Success(List(1, 2, 3))