我有这样一个代码块:斯卡拉异步和等待限制
val await1: List[Int] = await(futureMethod(id))
val mapped = await1.map(entry => {
(pq.id, await(anotherFutureMethod(entry.id)))
})
失败的原因的“伺机不得在嵌套函数中使用”我怎么能解决这个问题?为什么这应该成为一个问题?
我有这样一个代码块:斯卡拉异步和等待限制
val await1: List[Int] = await(futureMethod(id))
val mapped = await1.map(entry => {
(pq.id, await(anotherFutureMethod(entry.id)))
})
失败的原因的“伺机不得在嵌套函数中使用”我怎么能解决这个问题?为什么这应该成为一个问题?
我猜你的函数的签名,而是一个例子看起来是这样的:
使用Future.sequence
可能是一个可行的,无阻塞的解决方案,以避免使用嵌套await
电话。
你会想要链接未来的呼叫,而不是阻止他们。阻止 期货违抗未来的目的。
val future1: Future[List[Int]] = futureMethod(id)
val mapped = future1.map(_.flatMap(anotherFutureMethod)
.map(entry => {
(pq.id, entry.id)
}))
等待异步/等待不实际阻止,异步是一个宏https://github.com/scala/async – dk14
@ dk14哦整洁,我不知道那个库。 – Reactormonk
问题本身在https://github.com/scala/async/issues/32中描述,并说明了一些解决方法。 其中一种方法是在异步之上编写一层,以通过高级函数等待提升。我最近在scala-gopher中实现了这个功能[https://github.com/rssh/scala-gopher](下一个版本,现在你必须从源代码编译master来使用这个功能) – rssh