2016-09-03 12 views
0

Дано:Как восстановить поврежденную задачу?

import scalaz.concurrent.Task 
import scalaz._ 

val result: Task[String \/ Int] = Task { throw new RuntimeException("!")} 

Тогда я побежал, чтобы получить RuntimeException:

scala> result.unsafePerformSync 
java.lang.RuntimeException: ! 
... 

Имеет ли "эквивалент" Future#recover, то есть что-то вроде следующего Task?

def recover[A, B, C](t: Task[A], handleError: Throwable => B \/ C]: Task[B \/ C]

ответ

2

Task#handle (или в качестве альтернативы handleWith) делает трюк

def f: String = { 
    throw new RuntimeException() 
    "I will fail" 
    } 
    Task(f).handle{ case _ ⇒ "recovered"}.run \\ recovered