MapTo当它没有匹配时,它们都会失败

时间:2016-04-13 00:24:09

标签: scala akka future spray

我有以下代码,在没有捕获任何错误的情况下无声地失败:

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

但是有更好的答案吗?

1 个答案:

答案 0 :(得分:0)

我会使用recoverrecoverWith

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