How to invoke a method again and again until it returns a `Future` value containing `None`

前端 未结 3 1045
一向
一向 2021-01-21 19:57

Given a method that returns a Future like this...

def remove(id: String): Future[Option[User]] = Future {
  // removes and returns the user identifi         


        
3条回答
  •  天命终不由人
    2021-01-21 20:22

    Here it is:

    import concurrent._, ExecutionContext.Implicits._
    import java.util.concurrent.atomic._
    
    val count = new AtomicInteger(10)
    
    def f(s: String) = Future {
      if (count.decrementAndGet <= 0) None else Some(s)
    }
    
    Iterator continually {
      f("hello")
    } takeWhile {
      Await.result(_, duration.Duration.Inf).nonEmpty
    } foreach { _.map { _.map {
      println
    }}
    

    I hope it helps.

提交回复
热议问题