Как объединить существующие асинхронные запросы с RxAndroid или использовать сопрограммы Kotlin? - PullRequest
0 голосов
/ 11 февраля 2019

Вот мой код.У меня есть асинхронный запрос, который реализован в SDK.Я использую его, я реализовал его простым способом вызова входа в систему, обеспечивающий обратный вызов для этого асинхронного запроса.Мой вопрос, возможно ли объединить этот асинхронный запрос с помощью RxAndroid или Kotlin Coroutines?Поскольку у меня будет много цепочек обратных вызовов, чтобы избежать этого, я думаю объединиться с RxJava или Kotlin Coroutines.Любые намеки на ссылку на образец могут быть хорошими

private fun automaticLogin() {
    UserAction(username, password).login(AutomaticUserLoginRequest(this))
}


class AutomaticUserLoginRequest()
    : UserLoginRequest( object : ILoginResultHandler {
    override fun onSuccess(session: ISession) {
    }

    override fun onError(error: Error) {
    }
  })```

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете сделать что-то подобное с функцией suspendCoroutine:

suspend fun automaticUserLoginRequest(): ISession {
  return suspendCoroutine<ISession> { cont ->
    callUserLoginRequest(object : ILoginResultHandler {
      override fun onSuccess(session: ISession) {
         cont.resume(session)
      }

      override fun onError(error: Error) {
         cont.resumeWithException(error)
      }
    }
  }
}

Вы можете выполнить функцию приостановки из сопрограммы.Kotlinx.coroutines-android предоставляет Dispatchers.UI для этого:

fun someFunction() {
   //starts a coroutine, not waiting fro result
   launch(Dispatchers.UI) {

     val session = automaticUserLoginRequest()

     //the execution will resume here once login is done, it can be an exception too
     updateUI(session)
    }
}

https://github.com/Kotlin/kotlinx.coroutines/blob/master/ui/kotlinx-coroutines-android/README.md

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...