Как запустить одну и ту же функцию синхронно и асинхронно - PullRequest
0 голосов
/ 24 июня 2019

Я использую Room и RxJava2 в приложении для Android. У меня есть сценарий, в котором я хочу, чтобы одна и та же функция запускала synchronously в какой-то момент и запускала asynchronously в другом месте. Ниже приведена функция:

@Query("SELECT * from saved_survey WHERE enumeratorId = :enumeratorId and isDeleted=:isDeleted ORDER BY savedSurveyTime  DESC")
    fun getSavedSurveyList(enumeratorId: String, isDeleted: Boolean): Flowable<List<SavedSurvey>>

Я хочу запускать эту функцию синхронно при вызове из IntentService и запускаться асинхронно при вызове из потока пользовательского интерфейса. Я называю эту функцию как:

savedSurveyViewModel.getSavedSurveyList(enumeratorId, false)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe()

Я не хочу делать несколько функций в repository или viewmodel. Любой эффективный подход будет оценен.

Спасибо

1 Ответ

0 голосов
/ 25 июня 2019

Я нашел решение. Одну и ту же функцию можно использовать для синхронного и асинхронного. RxJava2 обеспечивает оба этих поведения.

Асинхронный

savedSurveyViewModel.getSavedSurveyList(enumeratorId, false)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe()

Синхронный

savedSurveyViewModel.getSavedSurveyList(enumeratorId, false).blockingSubscribe()

или

savedSurveyViewModel.getSavedSurveyList(enumeratorId, false).blockingSingle()

Спасибо.

...