RxSwift: как мне работать с планировщиками, чтобы я запускал по одному наблюдаемой за раз?

playORM может сделать это для вас, используя S-SQL (масштабируемый SQL), который просто добавляет разделение, так что вы можете делать объединения внутри разделов.

0
задан Jonas 17 January 2019 в 14:27
поделиться

1 ответ

1) При вызове:

.do {
    print("1: \(Thread.current)")
}

вы собираетесь выполнить замыкание onDispose, поэтому вам нужно передать его параметру onNext, чтобы выполнить его, как только первая наблюдаемая испустит событие. (Это причина, по которой вы видите 2, 3, 1)

2) concat оператор - это то, что вам нужно, если вам нужно дождаться завершения одной наблюдаемой, прежде чем выполнять следующую, так что ваш Foo.foo() должен быть изменен, чтобы вернуть Observable.

Попробуйте этот код:

class Foo {

    private let scheduler: SerialDispatchQueueScheduler

    init() {
        self.scheduler = SerialDispatchQueueScheduler(internalSerialQueueName: "")
        foo().concat(foo()).subscribe()
    }

    private func foo() -> Observable<Int> {
        return Observable<Void>.just(())
            .subscribeOn(scheduler)
            .do(onNext: {
                print("1: \(Thread.current)")
            })
            .map { () -> Bool in
                print("2: \(Thread.current)")
                return true
            }
            .flatMap { (shouldLoad) -> Observable<Int> in
                print("3: \(Thread.current)")

                let observableThatSwitchesScheduler = secretObservable
                    .do(onNext: { _ in
                        print("4: \(Thread.current)")
                    })

                return observableThatSwitchesScheduler
            }
            .do(onNext: { _ in
                print("5: \(Thread.current)")
            })
            .observeOn(MainScheduler.instance)
    }
}
0
ответ дан Fabio Felici 17 January 2019 в 14:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: