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
处理
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