1 import scala.concurrent.{Future => sFuture} 2 import scala.concurrent.ExecutionContext 3 import scala.util.{Success,Failure} 4 def futureTozFuture[A](sf: sFuture[A])(implicit ec: ExecutionContext): Future[A] =
5 Future.async {cb => sf.onComplete { 6 case Success(a) => cb(a) 7 // case Failure(e) => cb(e)
8 }} //> futureTozFuture: [A](sf: scala.concurrent.Future[A])(implicit ec: scala.con 9 //| current.ExecutionContext)scalaz.concurrent.Future[A]
10 def zFutureTosFuture[A](zf: Future[A]): sFuture[A] = { 11 val prom = scala.concurrent.Promise[A] 12 zf.unsafePerformAsync { 13 case a => prom.success(a)是 14 } 15 prom.future 16 }
1 def dbl(i: Int): Future[Int] = Future { i + i } //> dbl: (i: Int)scalaz.concurrent.Future[Int]
2 def sqr(i: Int): Future[Int] = Future { i * i } //> sqr: (i: Int)scalaz.concurrent.Future[Int]
3 def sum(a: Int, b: Int): Future[Int] = Future { a + b } 4 //> sum: (a: Int, b: Int)scalaz.concurrent.Future[Int]
5 val fsum = for { 6 a <- dbl(3) 7 b <- sqr(a) 8 c <- sum(a,b) 9 } yield c //> fsum : scalaz.concurrent.Future[Int] = BindAsync(<function1>,<function1>)
10
11 fsum.unsafePerformAsync { 12 case a => println(s"result c is:$a") 13 } 14 Thread.sleep(1000) //> result c is:42