Scala:基于未来的未来失败#collect

Scala: failing a Future based on a Future#collect

WS.post returns 一个 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) returns 是一个错误的值,因为我收到一个空值 json。我预计这会导致 Future 失败并执行 recoverWith,但那并没有发生。

我需要在收集案例中进行分支吗? 我怎样才能更优雅地处理这个问题?我以为 Future 会有这方面的规定。

您必须使用

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

json.as[JsArray] 将 json 转换为 JsArray 或抛出异常,可以用 recoverWith

处理