doOnSubscribe вызывается в потоке ввода-вывода - PullRequest
0 голосов
/ 28 марта 2019

У меня есть следующий код:

checkZipCode.exec(it)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .doOnSubscribe {
        Timber.d("Main thread: ${Looper.getMainLooper().isCurrentThread}")
        view.showLoading(true)
    }
    .doOnDispose { view.showLoading(false) }
    .flatMapMaybe { isZipValid ->
        if (isZipValid) {
            userModel.zipCode = it.toString()
            saveUser.exec(userModel)
            autoSelectCityIfSingle.exec()
        } else {
            // TODO: Should show error here?
            Maybe.empty()
        }
    }
    .subscribe(...)

Журналы: Main thread: false

Я думал, что doOnSubscribe вызывается в последнем планировщике над ним.Не так ли?

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Путь выполнения подписки на самом деле не является излучением, на которое действует observeOn.См. этот вопрос .Если вы действительно хотите, чтобы что-то происходило в главном потоке в этом месте вашей цепочки, возможно, вы можете использовать flatMap в другом Observable, который будет делать что-то в пределах его doOnSubscribe (так как это произойдет в потоке передачи, который являетсяосновная тема тут).

0 голосов
/ 28 марта 2019

Ну, doOnSubscribe выполняется в том же потоке с subscribe().

У меня были проблемы, потому что в потоке ввода-вывода был вызван метод subscribe ().

...