2014-09-26 29 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