我的目标是创建一个最终的Map [id,Result]。这里ErrorDocument 404 /missing.html
AddHandler server-parsed .html
#
Options +FollowSymLinks +Includes
RewriteEngine on
#
#External redirect for extensionless url
RewriteCond %{THE_REQUEST} \.html
#While on Localhost http://www.example.com is removed before / slash in the following
RewriteRule ^(.+)\.html$ /$1 [R=301,L]
#
# Internal rewrite for extensionless url
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /$1.html [L]
#
是一个案例类,如下所示:
Result
问题:我想点击一个返回JSON的API。我将解析此JSON并从整个JSON中检索所有case class Result(id: String, descr: String)
字段。
member_id
(以下是我被阻止的部分,如何在Akka Streams和Http中执行此操作) 在此之后,我想为memberList列表中的每个字符串执行:
memberList : List[String]
最后,将所有列表展平以获得最终List[(id, Result)]
如何正确实现以下两种方法Map[id, Result]
和getResult
(我已经粗略地了解了我正在尝试做的事情,对我的代码进行了评论)?
以下是我的代码:
getResponse
答案 0 :(得分:0)
你真的想在这里使用溪流吗?看起来使用'原始'期货是足够和简单的:
val root: Future[HttpResponse] = Http().singleRequest(HttpRequest(uri = uri)
val members: Future[List[String]] = root.map(getMembers)
val results: Future[List[(id, Future[Result])]] = members.map(ids.map(id => (id, getResult(id))))
val x: Future[List[Future[(id, Result)]]] = results.map(pairs.map { case (id, result) => result.map(r => (id, r))})
val y: Future[List[(id, Result)]]] = x.flatMap(Future.sequence)
def getMembers(response: HttpResponse): List[String] = ???
def getResult(id: String): Future[Result] = ???
现在这当然相当迂回/冗长,但我想展示每一步的“结构” - 一旦你了解了正在发生的事情,你可以简化它。