Scala:具有未来堆栈溢出错误的递归

Scala: Recursion with future Stack overflow error

考虑以下代码片段。太多的 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.方法签名不应该改变

Too many take() calls will result in stack overflow error.

不会。当 returns a Future 递归调用自身的方法时,该方法所知道的只是它有一个将来(可能)会被填充的值。实际代码在不同的堆栈上执行,因为它需要与原始调用异步完成,甚至可能不会发生在同一线程上。