2016-04-13 8 views
0

Ich habe den folgenden Code, der leise, ohne einen Fehler zu kontrollieren scheitern:MapTo Entweder schweigt fehlschlagen, wenn es nicht abgestimmt

(actor ? GetRowCount()).mapTo[Either[Rejection, Long]] map { 
     case Left(x) => ctx.reject(x) 
     case Right(totalRows) => ctx.complete(totalRows) 
} 

Wenn GetRowCount() keine Long zurück, sondern ein String zum Beispiel wurde kein Fehler aufgefangen und es scheitert einfach still.

Ich denke folgendes zu verwenden:

(actor ? GetRowCount()).mapTo[Either[Rejection, Any]] map { 
     case Left(x) => ctx.reject(x) 
     case Right(totalRows: Long) => ctx.complete(totalRows) 
     case _ => ctx.reject(Rejection("Type mismatch")) 
} 

Aber gibt es eine bessere Antwort?

Antwort

0

würde ich recover oder recoverWith

(actor ? GetRowCount).mapTo[Either[Rejection, Long]] map { 
    case Left(x) => ctx.reject(x) 
    case Right(totalRows) => ctx.complete(totalRows) 
} recover { 
    case e: Throwable => 
    logger.error(e, "Some thing wrong while performing ask") 
    //throw an error or return something here 
}