2014-09-26 44 views
0

Im新的斯卡拉,我正在使用喷雾发布请求到服务器。如果这个问题在某种程度上存在,那么提前道歉。我真的很感激,如果有人能告诉我如何做到这一点,或什么我做错了。我想要做的是:斯卡拉顺序发布使用无需等待理解

  1. 帖子的请求,并得到一个未来[的HttpResponse]
  2. 不使用等待(因为我不想阻塞线程),检查响应代码
  3. 如果它的状态码大于400,则更改数据并重新发布数据并返回Future [HttpResponse],而不做任何进一步处理。
  4. 如果步骤2中的状态码好,然后返回未来[的HttpResponse]从第2步

这是我到目前为止,这似乎并没有给我,如果状态响应代码很好,但是在服务器上完成它的工作。如果我重试相同的请求,我会得到第一个显示的结果,即404,而我期望第一个返回404,第二个修复数据并重发请求,并获得未来的响应。

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 
} 

任何帮助,非常感谢。由于

干杯

回答

1

你可以尝试用平面地图

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) 
} 
+0

尤金喜来做到这一点。像魅力伴侣一样工作:)欣赏它 – Josh 2014-09-28 21:58:09