Вопрос о пользовательском расширении 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)

Другие вопросы по тегам