2016-01-13 5 views
1

Я использую retrofit для подключения к API, который включает в себя уникальный токен в каждом ответе. Этот токен должен быть включен в следующий запрос. Это означает, что мне нужно дождаться ответа на запрос перед тем, как сделать следующий запрос.Последовательные запросы с модификацией

Есть ли встроенный механизм в модификации для достижения этого? Если бы не был рекомендованный подход? Обратите внимание, что я использую асинхронные методы дооснащения и версию 1.9. Перехватчики используются для чтения токена и автоматически добавляются к следующему запросу, который работает очень хорошо. Проблема возникает, когда 2 запроса сделаны в непосредственной близости, поэтому второй запрос заканчивается с использованием устаревшего токена, поскольку первый запрос еще не вернул новый.

ответ

0

Я предлагаю вам использовать RxAndroid в сочетании с Retrofit (Retrofit поддерживает RxJava).

При этом вы можете легко цепь вызовов, как:

webservice.getToken() 
    .flatMap(new Func1<Response, Observable<Response>>() { 

      @Override 
      public Observable<Response> call(Response getTokenResponse) { 
       String token = ... // TODO extract token. 
       return webservice.getDataFromWeb(token); 
      } 
     }) 

С webservice.getToken() вы будете получать маркер. Ответ этого вызова передается параметру getTokenResponse на flatMap-оператор. Здесь вы можете извлечь токен, и вы можете выполнить 2-й вызов с помощью этого токена.

Поскольку это сложная тема, некоторые дальнейшее чтение может быть необходимым, я хотел бы предложить следующие ссылки для RxAndroid:

https://github.com/ReactiveX/RxAndroid

https://github.com/ReactiveX/rxjava/wiki

http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/

http://joluet.github.io/blog/2014/07/07/rxjava-retrofit/

+0

Проблема в том, что я переоснащаю (извиняюсь, каламбур) это ry большое приложение, которое уже построено, поэтому реализация смещения парадигмы, подобная этому, будет очень болезненной. Вот почему я надеялся, что будет простой способ предотвратить модернизацию от параллельных запросов. – aaronmarino

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