fut.map(_ + 1) returns a new Future , whose .value may not have been completed yet. If it hasn't, then you get the None the println shows, otherwise you'll get Some(Success(43)) .

You can see this in the REPL:

// Paste the body of your Demo object before // Then repeatedly call the last println: scala> println(fut.map(_ + 1).value) // None Some(Success(43)) scala> println(fut.map(_ + 1).value) // None None scala> println(fut.map(_ + 1).value) // None Some(Success(43)) scala> println(fut.map(_ + 1).value) // None Some(Success(43)) scala> println(fut.map(_ + 1).value) // None None

Edit:

Showing the non-deterministic results of your code (without any changes to it):