Skip to content

Instantly share code, notes, and snippets.

@mbseid
Created December 16, 2016 21:10
Show Gist options
  • Save mbseid/d7277c1239a2b2142429eb85c2513f66 to your computer and use it in GitHub Desktop.
Save mbseid/d7277c1239a2b2142429eb85c2513f66 to your computer and use it in GitHub Desktop.
Scala Error Handling and Debugging
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
object Main extends App {
Console.println("Running")
val future = Future.successful(1)
val future2 = Future.successful(2)
def wrapFuture(future: Future[Int]) = future.flatMap{ a =>
if(a == 1){
Future.successful(a)
} else {
Future.failed(new Throwable())
}
}
val composedFuture = for {
a <- wrapFuture(future)
b <- wrapFuture(future2)
} yield {
a + b
}
composedFuture onFailure {
case t => Console.println(t.getStackTrace.mkString("\n"))
}
}
$ scala Main
Running
Main$$anonfun$wrapFuture$1.apply(test.scala:13)
Main$$anonfun$wrapFuture$1.apply(test.scala:9)
scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:253)
scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251)
scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment