2014-09-26 3 views
0

Im новый для scala и использую спрей для отправки запроса на сервер. Извините заранее, если этот вопрос несколько в этом. Я был бы очень признателен, если бы кто-нибудь мог сказать мне, как это сделать или что я делаю неправильно. То, что я хотел бы сделать, это:scala последовательный пост для понимания без ожидания

  1. Опубликовать запрос и получить обратно будущий [HttpResponse]
  2. Без использования ОЖИДАНИЯ (потому что я не хочу, чтобы блокировать темы), проверить код ответа
  3. Если у него есть код состояния> 400, то изменяйте данные и отправляйте данные и возвращайте Future [HttpResponse], не делая ничего дальше.
  4. Если код состояния с шага 2 хорошо возвратите будущее [HttpResponse] с шага 2.

Это то, что я до сих пор, что не появляется, чтобы дать мне ответ, если статус код был хорошим, однако выполняет свою работу на сервере. Если я повторю один и тот же запрос, я получаю результат первого появления i.e 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

Смежные вопросы