Иногда я в чужом коде встречаю использование just, чтобы вызвать какой-либо метод, используя RxJava. В этом посте я хотел бы рассказать, почему не стоит так делать, и показать правильный вариант реализации.
Click here to read this article!
Как сделать метод асинхронным с помощью RxJava
Как сделать метод асинхронным с помощью RxJava
Последний раз редактировалось damager82 28 май 2018, 12:09, всего редактировалось 11 раз.
- getmejiayu
- Сообщения: 3
- Зарегистрирован: 02 авг 2017, 13:41
- Контактная информация:
Re: Как сделать метод асинхронным с помощью RxJava
Отличный материал. Спасибо
-
- Сообщения: 42
- Зарегистрирован: 25 янв 2015, 18:57
Re: Как сделать метод асинхронным с помощью RxJava
Скажите пожалуйста, а почему все-таки just не выполняется в щедулере, который мы указываем в subscribeOn()? Просто я думал, что независимо от того, где находится subscribeOn, все начинает выполняться в другом потоке (RxIoScheduler-2 в данном случае)damager82 писал(а):Иногда я в чужом коде встречаю использование just, чтобы вызвать какой-либо метод, используя RxJava. В этом посте я хотел бы рассказать, почему не стоит так делать, и показать правильный вариант реализации.
Click here to read this article!
P.S. хорошо бы указать в данном посте, что fromCallable() внутри себя использует try/catch, чтобы было понятнее, почему именно нет проблемы при использовании его, а не just, т.е. вот примерная реализация его:
try {
subscriber.onNext(longAction("5"));
subscriber.onCompleted();
} catch (Exception e) {
subscriber.onError(e);
}
Re: Как сделать метод асинхронным с помощью RxJava
Мы при создании Observable явно вызываем метод Observable.just в UI потоке. И если мы передаем туда не значение, а метод, то этот метод должен будет выполниться сразу же, чтобы получить значение, передать его в just и продолжить идти по цепочке методов создания Observable. Т.е. то, что внутри just - выполняется при создании Observable. Потому что Observable нужно сразу знать значение.danek130995 писал(а):Скажите пожалуйста, а почему все-таки just не выполняется в щедулере, который мы указываем в subscribeOn()? Просто я думал, что независимо от того, где находится subscribeOn, все начинает выполняться в другом потоке (RxIoScheduler-2 в данном случае)damager82 писал(а):Иногда я в чужом коде встречаю использование just, чтобы вызвать какой-либо метод, используя RxJava. В этом посте я хотел бы рассказать, почему не стоит так делать, и показать правильный вариант реализации.
Click here to read this article!
P.S. хорошо бы указать в данном посте, что fromCallable() внутри себя использует try/catch, чтобы было понятнее, почему именно нет проблемы при использовании его, а не just, т.е. вот примерная реализация его:
try {
subscriber.onNext(longAction("5"));
subscriber.onCompleted();
} catch (Exception e) {
subscriber.onError(e);
}
А при fromCallable у нас получается что-то типа функционального программирования. Мы передаем в Observable функцию. И эта функция будет вызвана уже где то внутри Observable при старте. Т.е. нет необходимости вызывать Callable при создании Observable, чтобы получить значение. Observable согласен принять функцию, которую он потом сам может выполнить в указанном шедулере и получить значение. Получается что-то типа отложенного вызова.
Как-то так)
Re: Как сделать метод асинхронным с помощью RxJava
Здравствуйте.
В зависимостях у Вас указана 2-я версия Rx, а в примере используется Action1 вместо Consumer. Это просто опечатка?)
В зависимостях у Вас указана 2-я версия Rx, а в примере используется Action1 вместо Consumer. Это просто опечатка?)