问题描述
我正在使用 scala sttp 客户端,特别是使用 Monix 后端,我有以下代码:
def httpTask(href: String): Task[HttpBinaryResponse] = {
val request = basicRequest
.get(uri"$href")
AsyncHttpClientMonixBackend
.resource()
.use { backend =>
request.send(backend).map {
response: Response[Either[String,String]] =>
println(s"For URL: $href >> Got response code: ${response.code}")
HttpBinaryResponse(
href,response.code.isSuccess,response.headers.map(elem => (elem.name,elem.value)))
}
}
}
hrefs.toSet.flatten.filter(_.startsWith("http")).map(httpTask) // Set[Task[HttpBinaryResponse]]
val taskSeq = appBindings.httpService.parse(parserFilter)
val chunks = taskSeq.sliding(30,30).toSeq
val batchedTasks = chunks.map(chunk => Task.parSequence(chunk))
val allBatches = Task.sequence(batchedTasks).map(_.flatten)
然后我对物化类型进行模式匹配并返回,我想要的不仅仅是成功和失败,但我想同时拥有这两个值:
allBatches.runToFuture.materialize.map {
case Success(elem) =>
Ok(
Json
.obj("status" -> "Ok","URL size" -> s"${elem.size}")
).enableCors
case Failure(err) =>
Ok(
Json
.obj("status" -> "error","message" -> s"${err.getMessage}")
).enableCors
}
我需要获取带有相应成功或失败消息的 URL 列表。使用我所拥有的这种方法,我只能得到其中之一,这在我模式匹配时很明显。如何同时收集成功和失败?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)