我有两个外部呼叫
我需要使用第一次呼叫中可用序列的第二次呼叫来更新每个人的状态。这就是我尝试的方式,
getFuturePeople.map( (seqPeople : Seq[People]) => {
seqPeople.map(person => getStatus(person._id).status).map(status => {
//Update status for this person but I get Seq[Future[Peoson]]
})
})
像这样使用 Future.sequence:
val returnedFuture :Seq[Future[People]] = Seq(Future.successful(People))
val flattenedFuture:Future[Seq[Peope]] = Future.sequence(returnedFuture)
您需要以Future.traverse
的形式遍历List
。
例子,
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
def getFuturePeople = Future { List("Steven", "Wilson", "Michael") }
def getStatus(name: String) = Future { s"$name updated" }
现在,就像您尝试的那样,您会得到Future[List[Future[String]]]
。
getFuturePeople.map { people => people.map { p => getStatus(p) } }
1)所以,不是仅仅映射人员列表
,而是Future.traverse
,
val updatedPeople: Future[List[String]] = getFuturePeople.flatMap { people =>
Future.traverse(people) { p =>
getStatus(p)
}
}
2)同样有效的是,一旦你映射了人员列表
并获得了List[Future[A]]
,使用Future.sequence
转换为Future[List[A]]
,
val updatedPeopleUsingSeq: Future[List[String]] = getFuturePeople.flatMap { people =>
Future.sequence {
people.map(getStatus)
}
}
使用可以使用Future.sequence
来转换结果,例如:
val-futureOfSeq=Future.sequence(sequofuture)
我试图使用以下公式将Future[Seq[(String,String)]转换为Future[Seq[(String)]: 所以 sortedSeq 是 Future[Seq[(String, String)]] 但我一直得到错误: 我做错了什么?
基本上,我想读取Apache Ignite上的查询返回的所有值,该查询返回一个IgniteCursor。 我想以非阻塞的方式读取光标。 我可以写: 也许我错过了什么? 换句话说,有一种方法可以使用“异步非阻塞IO”从Ignite获取记录列表?
描述 (Description) 方法tuple()将项列表转换为元组 语法 (Syntax) 以下是tuple()方法的语法 - tuple( seq ) 参数 (Parameters) seq - 这是一个要转换为元组的序列。 返回值 (Return Value) 此方法返回元组。 例子 (Example) 以下示例显示了tuple()方法的用法。 #!/usr/bin/python aLi
描述 (Description) 方法extend()将seq的内容追加到list。 语法 (Syntax) 以下是extend()方法的语法 - list.extend(seq) 参数 (Parameters) seq - 这是元素列表 返回值 (Return Value) 此方法不返回任何值,但将内容添加到现有列表。 例子 (Example) 以下示例显示了extend()方法的用法。 #!