Scala:失败的未来基于未来#收集



WS.post返回一个Future[Response],但我想要一个Future[Data],所以我使用Future.collect来达到这个目的。

private def getDataFuture(data: String): Future[JsValue] =
    initAuthenticatedRequest().post(body).collect {
    case response => response.json(0)
  }.recoverWith {
    case NonFatal(_) => getDataFuture(data)
  }

但是,有时response.json(0)返回一个错误的值,因为我收到一个空的 json。我预计这会导致未来失败并做recoverWith,但这并没有发生。

我是否需要在收集案例中进行分支?我怎样才能更优雅地处理这个问题?我以为未来会为此做出规定。

你必须使用

initAuthenticatedRequest().post(body).map(_.json.as[JsArray])

json.as[JsArray]将 JSON 强制转换为JsArray或抛出异常,这可以通过recoverWith

来处理

最新更新