Начиная асинхронную операцию с использованием RxJava без подписки на наблюдаемое? - PullRequest
0 голосов
/ 18 января 2019

Допустим, у вашего DAO есть этот метод, который обновляет записи пользователей в БД:

@Update
fun update(user: User): Single<Int>

Недавно я начал изучать RxJava и до сих пор видел множество примеров, таких как:

// Example 1
disposable.add(dao.updateUser(user)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe {
        Log.d(TAG, "response received")
    }

В приведенном выше примере я понимаю, что, как только подписка начнется, в рабочем потоке будет выполняться updateUser(), и подписчик будет уведомлен и запущен в основном потоке после завершения выполнения.

Но что, если вас не интересует результат updateUser(), и все, что вам нужно, это просто выполнить updateUser() в рабочем потоке?

Пока я пытался сделать:

// Example 2
dao.updateUser(user)

или

// Example 3
dao.updateUser(user).subscribeOn(Schedulers.io())

Но они не работали. Кажется, что запросы на обновление никогда не выполняются, ничего не было зарегистрировано и записи не изменились. Я предполагаю, что это потому, что к нему не привязан ни один подписчик.

Пока я заставляю его работать, подключая случайного подписчика, который на самом деле не делает ничего подобного тому, который указан в Example 1. Одна из проблем этого подхода заключается в том, что мне может понадобиться много раз выполнить этот запрос, что может создать много фиктивных подписчиков, не говоря уже о том, что код выглядит действительно плохо.

Не могли бы вы помочь мне найти лучший способ справиться с этим?

1 Ответ

0 голосов
/ 18 января 2019

Но Вы уже написали ответ на Ваш вопрос.

Вы можете просто позвонить:

dao.updateUser(user).subscribe() 

Если вы хотите манипулировать / переходить между потоками, вы делаете что-то, как в примере 1.

...