请考虑以下代码段。太多的take()调用将导致堆栈溢出错误。克服这种情况的好策略是什么?
def take(): Future[Int] = {
val processResponseF: Future[Boolean] = performSomeAction()
processResponseF.flatMap(
processResponse => {
if(processResponse)
Future.successful(100)
else
take()
}
)
}
def performSomeAction(): Future[Boolean] = {
//This returns future of boolean
}
假设 - 1.不应更改方法签名
答案 0 :(得分:2)
太多的take()调用将导致堆栈溢出错误。
它没有赢。当一个返回Future
的方法以递归方式调用自身时,所有该方法都知道它具有将在稍后填充(可能)的未来值。实际代码在不同的堆栈上执行,因为它需要从原始调用异步完成,甚至可能不会在同一个线程上发生。