Sah*_*cem 2 reactive-programming ios swift rx-swift
我有一个函数可以向服务器发出 API 请求。我想循环它直到它返回false(没有更多数据)。
func getData(id: Int) -> Observable<Bool> {
return Observable.create { observer in
// Alamofire request
// parse data
// if can decode,
// return true and increment page's property
// otherwise false
// error, if there's a problem
}
}
Run Code Online (Sandbox Code Playgroud)
takeWhile,比如 : getData(id).takeWhile {$0}。它只迭代我的函数 1x 次。第二次尝试:使用范围。这里的问题是,即使我的getData函数出错,循环也不会停止,而是继续!
Observable.range(start: 1, count: 100)
.enumerated()
.flatMapLatest({ _ in
self.getData(someID)
})
.subscribe(onNext: { _ in
// save to DB
observer.onNext(true)
observer.onCompleted()
}, onError: { error in
observer.onError(error)
})
.disposed(by: self.disposeBag)
Run Code Online (Sandbox Code Playgroud)有没有办法做到这一点,rx风格?
像这样的东西?
let callApiTrigger = BehaviorRelay<Bool>(value: true)
let callApiEnoughTimes = callApiTrigger.asObservable()
.takeWhile { $0 }
.flatMap { _ in
return getData(someId)
}
.do(onNext: { (apiResult: Bool) in
callApiTrigger.accept(apiResult)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2454 次 |
| 最近记录: |