RxSwift дизайн для асинхронного запроса

голоса
0

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

  • После входа в приложение первый « GetData запрос» сделано. Эти данные очень важны и будут загружены за блеснами. При приеме, данные сохраняются в БД Core Data. Когда эта задача выполнена ( с помощью блока завершения) следующий запрос запускается , который должен работать асинхронно в фоновом режиме, данные здесь также сохраняется в БД. Прядильщик должен быть показан , если вид представления последнего осуществляется доступ к данным , и данные не были получены и извлекаются из БД.

Модель

let subject = ReplaySubject<[MyObject]>.create(bufferSize: 3)
var observable : Observable<[MyObject]>?

 init() {
        self.observable = subject
 }
 ...

 self?.insertFirstDataToDb(firstData){
   self?.api.getNextData(param,  success: { (data) -> Void in
    self?.insertNextDataToDb(firstData)

  })
  ... 
}

ViewController

override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
        // show spinner if data is not available yet
        self.myModel?.observable?
            .subscribe(onNext : { (additionalData) in
                self.updateMyTab(additionalData)
               // hide spinner
        })
        .disposed(by: self.disposeBag)
}

Я предполагаю, что это может быть сделано без использования RxSwift, будет ли какая-либо проблемы с производительностью? Любые предложения, как решить эту проблему?

Задан 01/04/2018 в 23:03
источник пользователем
На других языках...                            


1 ответов

голоса
0

Для того, чтобы начать и остановить счетчик можно соответственно использовать onSubscribedи onNextзамыкание doоператора.

Направлять множественные запросы один за другим , я бы рекомендовал бы использовать flatMapLatestоператор. Для хорошего дизайна вы можете разработать decoratorдля запроса , который запустит вертушку , когда запрос подписан.

Ответил 02/04/2018 в 11:34
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more