2017-07-05 157 views
0

我需要在程序中拋出一個異常,但異常在未來發生,所以拋出在不同的線程中。如何使這個例子工作?拋出未來的異常

object TestFutures extends App { 

    val f0 = Future { 0 } 
    val f1 = Future { 1 } 
    val fx = Seq(f0,f1) 

    fx.map { 
    seq => seq.map { i => 
     println("i="+i) 
     if (i == 1) 
       throw new Exception("This is an exception") 

    } 
    } 


    Thread.sleep(5000) 
} 

這是程序的輸出,但我需要它拋出異常:

i=0 
i=1 
+1

http://docs.sca la-lang.org/overviews/core/futures.html#blocking-outside-the-future – danielnixon

+0

在您的程序中拋出異常*。 – pedrofurla

回答

1

結果仍是未來

val stillFutures: Seq[Future[Unit]] = fx.map { 
    seq => seq.map { i => 
     println("i="+i) 
     if (i == 1) 
     throw new Exception("This is an exception") 

    } 
    } 

您可以在成功/失敗檢查每個未來

stillFutures.foreach{ 
_.onComplete{ 
    case Success(_) => // do nothing 
    case Failure(ex) => throw ex 
}} 
0

如何使這個例子工作?

您可以使用for,使其工作作爲

val f0 = Future { 0 } 
val f1 = Future { 1 } 
val fx = Seq(f0,f1) 

for(seq <- fx){ 
    for(i <- seq) { 
    println("i="+i) 
    if (i == 1) { 
     throw new Exception("This is an exception") 
    } 
    } 
} 
Thread.sleep(5000)