2016-04-13 5 views
0

Я не следующий код, который молча терпеть неудачу без ловя любую ошибку:МАПТО Либо молчать терпят неудачу, когда это не соответствует

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

Когда GetRowCount() не возвращает Long, но String, например, был пойман без ошибок и он просто терпит неудачу.

Я имею в виду использовать следующее:

(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")) 
} 

Но есть лучший ответ?

ответ

0

Я хотел бы использовать recover или 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 
}