Вопрос о пользовательском расширении RxSwift Observable - PullRequest
0 голосов
/ 18 февраля 2019
extension Observable {
    func dispatchAsyncMainScheduler() -> Observable<E> {
        return self.observeOn(backgroundScheduler).observeOn(MainScheduler.instance)
    }
}

Я нашел этот фрагмент в https://github.com/artsy/eidolon

Я новичок reactive здесь.Из того, что я понимаю.subscribeOn относится ко всей цепочке, тогда как observeOn применяет операторы под ней.

Мой вопрос совершенно очевиден, что именно эти два последовательных observeOn вообще делают?

Ответы [ 2 ]

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

Это не опечатка.Если вы посмотрите на определение backgroundScheduler 10 строк над этим оператором, вы увидите, что это SerialDispatchQueueSceduler.Это означает, что он ставит операции в очередь и выполняет их по порядку в фоновом потоке.

Они используют его, чтобы избежать аномалий повторного входа.Я предполагаю, что этот код был написан до того, как MainScheduler.asyncInstance было помещено в библиотеку, что делает то же самое.

Более подробную информацию можно найти в библиотеке Rx:

  • Проблема: это поведение нарушает грамматику наблюдаемой последовательности.next (error | completed)? Это поведение нарушает грамматику, потому что есть пересекающиеся события последовательности.Наблюдаемая последовательность пытается отправить событие до того, как завершится отправка предыдущего события.
  • Интерпретация: Это может означать, что в вашем коде есть какая-то непредвиденная циклическая зависимость или что система не ведет себя ожидаемым образомway.
  • Помощь: Если это ожидаемое поведение, это сообщение может быть подавлено путем добавления .observeOn(MainScheduler.asyncInstance) или путем чередования событий последовательности другим способом.
0 голосов
/ 18 февраля 2019

Похоже на опечатку для меня.Должно быть .subscribeOn(backgroundScheduler)

...