I have 2 methods that return `Future[Option[String]]` and need to invoke the second method if the first method returns a `Future[None]`. Following is the code I have so far:

```
def method1(): Future[Option[String]] = Future(None)
def method2(): Future[Option[String]] = Future(Some("test"))

val resultFuture = method1().flatMap(option =>
if (option.isDefined) { // Alternatives?
  Future(option)
} else {
  method2()
})

val durationSeconds = {
  import scala.concurrent.duration._
  import scala.language.postfixOps
  20 seconds
}
val result = Await.result(resultFuture, durationSeconds)
println(result) // Prints Some(test) as expected

```

I think this solution is deficient because

1. The success value (the if portion) is being mapped although there is no actual value transformation
2. Un-necessary creation of a second Future(in the if block) to keep the compiler happy.

I have tried 

1. `method1().flatMap(option => option.fold(method2)(value => Future(Option(value))))`. But this has the same issue.
2. `option.orElse(...)`, but it needs to return an `Option[B]` *not* `Future[Option[B]]`.

Appreciate any pointers on mapping the `Future[None]` without explicitly mapping/passing-through the `Future[Some[String]]`.