Создайте http-запрос с двумя последовательностями по сопрограмме.Второй запрос должен ждать, когда закончить первым - PullRequest
0 голосов
/ 18 сентября 2019

Android studio 3.5 В своем проекте я использую дооснащение и котлин.Я хочу перейти к следующим действиям сопрограммы Kotlin:

  1. Запустить первый запрос http путем модификации.
  2. Только после успешного завершения затем запустить второй запрос http путем модификации.
  3. Если первый запрос не удался, НЕ запускайте второй запрос.

Возможно ли это сделать с помощью сопрограмм Котлина?

Спасибо.

1 Ответ

2 голосов
/ 19 сентября 2019

Да, это полностью выполнимо с сопрограммами:

interface MyApi{
    @GET
    suspend fun firstRequest(): Response<FirstRequestResonseObject>
    @GET
    suspend fun secondRequest(): Response<SecondRequestResponseObject>
}

Теперь вызов:

coroutineScope.launch{
  //Start first http request by retrofit.
  val firstRequest = api.getFirstRequest()
  if(firstRequest.isSuccessFul){
    //Only after success finish then start second http request by retrofit.
    val secondRequest = api.getSecondRequest()
  }
 //If first request fail then NOT start second request.
}

Но вы можете рассмотреть свои исключения:

val coroutineExceptionHandler = CoroutineExceptionHandler{_, throwable -> throwable.printStackTrace()
}

А затем:

coroutineScope.launch(coroutineExceptionHandler ){
      val firstRequest = api.getFirstRequest()
      if(firstRequest.isSuccessFul){
        val secondRequest = api.getSecondRequest()
      }
    }

Готово!

Для этого подхода необходимо установить модификацию 2.6 или выше.В противном случае ваши ответы должны быть Deferred<Response<FirstResponseObject>>, а запросы api.getFirstRequest().await()

...