scala顺序贴子,用于理解而无需等待
我是scala新手,我使用spray向服务器发送请求。如果这个问题有点离题,请提前道歉。如果有人能告诉我如何做到这一点或我做错了什么,我将不胜感激。我想做的是:scala顺序贴子,用于理解而无需等待,scala,post,for-loop,spray,Scala,Post,For Loop,Spray,我是scala新手,我使用spray向服务器发送请求。如果这个问题有点离题,请提前道歉。如果有人能告诉我如何做到这一点或我做错了什么,我将不胜感激。我想做的是: 发布请求并返回未来[HttpResponse] 不使用wait(因为我不想阻塞线程),检查响应代码 如果它的状态代码>400,则更改数据并重新发布数据并返回未来[HttpResponse],而不做任何进一步的操作 如果步骤2中的状态代码为良好,则返回步骤2中的未来[HttpResponse] 这就是我到目前为止所做的,如果状态代码是好的
def post(headers:HttpHeader, data:HttpEntity): Future[HttpResponse] = {
...
}
def secondPost(headers:HttpHeader, data:HttpEntity): Future[HttpResponse] = {
// fix up data and repost
post(newHeaders, newData)
}
for{
first <- post(headers, data)
if first.status.intValue > 400
second < secondPost(headers, data)
} yield {
if (first.status.intvalue > 400) second else first
}
def post(标题:HttpHeader,数据:HttpEntity):未来[HttpResponse]={
...
}
def secondPost(标题:HttpHeader,数据:HttpEntity):未来[HttpResponse]={
//修复数据并重新发布
post(新标题、新数据)
}
为了{
前400名
第二次<第二次发布(标题、数据)
}屈服{
如果(first.status.intvalue>400)second else first
}
非常感谢您的帮助。谢谢
干杯你可以试着用平面地图
post(headers, data) flatMap {
case response // first failed, try second requests
if response.status.intValue > 400 =>
secondPost(headers, data)
case response => // first one was good, just return it
Future.successfull(response)
}
嗨,尤金。像个迷人的伙伴一样工作:)谢谢