Я хочу запустить задачу входа в систему, нажав кнопку входа в систему, после этого выберете список заказов пользователя, адрес доставки, список пожеланий, другую информацию. startTask - кнопка, пользователь нажимает ее, я запускаю эти задачи, но теперь, если ошибка входа в систему, пользователь снова коснитесь кнопки StartTask, я не могу снова запустить эти задачи, почему?
Пример кодаЗадача RxSwift async
private func test() {
let data = ["fetch order list", "fetch shipping addresses", "fetch wishlist", "fetch other info"]
let fetchInfoTasks = data.map{ asyncTask($0) }.toObservable()
let someTasks = fetchInfoTasks.merge().toArray()
let result = login().flatMapLatest{ _ in someTasks }
startTask
.rx_tap
.flatMapLatest{ result }
.catchError{ error in
.....error......
return Observable.empty()
}
.subscribeNext{ tasks in
.....all completed....
}
.addDisposableTo(disposeBag)
}
private func login()-> Observable<String> {
return Observable.create{ observer in
performClosure(afterDealy: 1, onMainQueue: false) {
if arc4random() % 4 == 0 {
observer.onNext("login finished")
observer.onCompleted()
} else {
observer.onError(NSError(domain: "", code: -1, userInfo: [NSLocalizedDescriptionKey: "some error"]))
}
}
return AnonymousDisposable{}
}
}
private func asyncTask(name: String)-> Observable<String> {
return Observable.create{ observer in
let delay = Double(arc4random() % 6 + 1)
performClosure(afterDealy: delay, onMainQueue: false) {
observer.onNext(name)
observer.onCompleted()
}
return AnonymousDisposable{}
}
}
func performClosure(afterDealy delay: Double, onMainQueue mainQueueOrNot: Bool, action: dispatch_block_t) {
let delayIntervals = Double(NSEC_PER_SEC) * delay
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delayIntervals))
let queue = mainQueueOrNot ? dispatch_get_main_queue() : dispatch_get_global_queue(QOS_CLASS_UTILITY, 0)
dispatch_after(time, queue, action)
}
После возникновения ошибки, поток завершается. Спасибо, это очень полезно! Могу ли я спросить, есть ли какие-либо источники/примеры, из которых я могу найти связанные с ними практики RxSwift (кроме документации)? –