Вопрос о пользовательском расширении RxSwift Observable
extension Observable {
func dispatchAsyncMainScheduler() -> Observable<E> {
return self.observeOn(backgroundScheduler).observeOn(MainScheduler.instance)
}
}
Я нашел этот фрагмент в https://github.com/artsy/eidolon
Я reactive
начинающий здесь. Из того, что я понимаю. subscribeOn
относится ко всей цепочке, тогда как observeOn
применяет операторы под ним.
Мой вопрос совершенно очевиден, что именно делает эти два подряд observeOn
делать вообще?
2 ответа
Это не опечатка. Если вы посмотрите на определение backgroundScheduler
10 строк над этим оператором, вы увидите, что это SerialDispatchQueueSceduler
, Это означает, что он ставит операции в очередь и выполняет их по порядку в фоновом потоке.
Они используют его, чтобы избежать аномалий повторного входа. Я предполагаю, что этот код был написан раньше MainScheduler.asyncInstance
был помещен в библиотеку, которая делает то же самое.
Больше информации можно найти в библиотеке Rx:
- Проблема: это поведение нарушает грамматику наблюдаемой последовательности.
next (error | completed)?
Такое поведение нарушает грамматику, потому что есть пересекающиеся события последовательности. Наблюдаемая последовательность пытается отправить событие до завершения отправки предыдущего события.- Интерпретация: Это может означать, что в вашем коде есть какая-то неожиданная циклическая зависимость или что система не ведет себя ожидаемым образом.
- Помощь: Если это ожидаемое поведение, это сообщение может быть подавлено путем добавления
.observeOn(MainScheduler.asyncInstance)
или путем чередования событий последовательности другим способом.
Похоже на опечатку для меня. Должно быть .subscribeOn(backgroundScheduler)