我如何从Scalaz的未来中获得价值?
我有以下代码:我如何从Scalaz的未来中获得价值?,scala,future,scalaz,Scala,Future,Scalaz,我有以下代码: package functorapplication import scalaz._ import Scalaz._ import scalaz.concurrent.Future object FunctorApplication2 extends App { val f1 = Future(3)//(ec) val f2 = Future(4)//(ec) val f3 = Future(5)//(ec) val calculate = (a: Int)
package functorapplication
import scalaz._
import Scalaz._
import scalaz.concurrent.Future
object FunctorApplication2 extends App {
val f1 = Future(3)//(ec)
val f2 = Future(4)//(ec)
val f3 = Future(5)//(ec)
val calculate = (a: Int) => (b: Int) => (c: Int) => a + b + c
val area = f1 <*> (f2 <*> (f3 <*> Future(calculate)))//(ec))) // Future(12)
//println(area)//BindSuspend(scalaz.concurrent.Future$$Lambda...
println("starting")
val summed = for {
a <- area
} yield {
println(a)
}
area.map(value => println(value))
//println(summed)//Suspend(scalaz.concurrent.Future$$Lambda...
println("done")
}
关键是——在未来,对于理解或映射来说,似乎没有任何价值
我的问题是:我如何从Scalaz的未来中获得价值?
注:
这是我的scala版本
scalaVersion := "2.12.5",
这是我的scalaz版本
"org.scalaz" %% "scalaz-core" % "7.2.26",
"org.scalaz" %% "scalaz-concurrent" % "7.2.26",
"org.scalaz" %% "scalaz-effect" % "7.2.26",
"org.scalaz" %% "scalaz-iteratee" % "7.2.26"
如果您持有类型为
Future[a]
的值,则您有资格在将来某个时间获得该值
- 类型为
a
- 或者是一个错误,表示为类型为
的值Throwable
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
val f1 = Future(3)//(ec)
val f2 = Future(4)//(ec)
val f3 = Future(5)//(ec)
val calculate = (a: Int) => (b: Int) => (c: Int) => a + b + c
val area: Future[Int] = for {
v1 <- f1
v2 <- f2
v3 <-f3
} yield calculate(v1)(v2)(v3)
println("starting")
println("adding future side effect")
//this happens in the future
val withSideEffect = area.map(value => println("side-effect: " + value))
println("awaiting now")
//now, let's wait
println("Await: " + Await.ready(withSideEffect, Duration.Inf).value)
println("done")
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
val f1 = Future(3)//(ec)
val f2 = Future(4)//(ec)
val f3 = Future(5)//(ec)
val calculate = (a: Int) => (b: Int) => (c: Int) => a + b + c
val area: Future[Int] = for {
v1 <- f1
v2 <- f2
v3 <-f3
} yield calculate(v1)(v2)(v3)
println("starting")
println("adding future side effect")
//this happens in the future
val withSideEffect = area.map(value => println("side-effect: " + value))
println("awaiting now")
//now, let's wait
println("Await: " + Await.ready(withSideEffect, Duration.Inf).value)
println("done")
starting
adding future side effect
awaiting now
side-effect: 12
Await: Some(Success(()))
done