2015-09-25 103 views
0

我有这样一个代码块:斯卡拉异步和等待限制

val await1: List[Int] = await(futureMethod(id)) 

val mapped = await1.map(entry => { 
    (pq.id, await(anotherFutureMethod(entry.id))) 
}) 

失败的原因的“伺机不得在嵌套函数中使用”我怎么能解决这个问题?为什么这应该成为一个问题?

回答

4

我猜你的函数的签名,而是一个例子看起来是这样的:

​​

使用Future.sequence可能是一个可行的,无阻塞的解决方案,以避免使用嵌套await电话。

+0

问题本身在https://github.com/scala/async/issues/32中描述,并说明了一些解决方法。 其中一种方法是在异步之上编写一层,以通过高级函数等待提升。我最近在scala-gopher中实现了这个功能[https://github.com/rssh/scala-gopher](下一个版本,现在你必须从源代码编译master来使用这个功能) – rssh

1

你会想要链接未来的呼叫,而不是阻止他们。阻止 期货违抗未来的目的。

val future1: Future[List[Int]] = futureMethod(id) 

val mapped = future1.map(_.flatMap(anotherFutureMethod) 
    .map(entry => { 
    (pq.id, entry.id) 
    })) 
+1

等待异步/等待不实际阻止,异步是一个宏https://github.com/scala/async – dk14

+0

@ dk14哦整洁,我不知道那个库。 – Reactormonk