【发布时间】:2018-06-03 00:19:21
【问题描述】:
假设我有 Ints 数组:
var items = [1, 2, 3, 4, 5]
一个接受 Int 参数并基于它发送网络请求的函数:
func sendRequest(argument: Int) -> Observable<Void> {
// sends network request
...
}
我想为 items 数组的每个元素发送网络请求,但我想按顺序进行,仅在前一个请求完成后发送下一个请求。
我的第一次尝试是这样的:
let observables = items.map{ [weak self] argument in (self?.sendRequest(argument: argument) ?? Observable.empty()) }
let result = Observable.concat(observables)
然而,这种方法同时发送请求,并且只按顺序组合结果。
我的第二种方法:
let items = [1, 2, 3, 4, 5]
var result = Observable.just(Void())
for item in items {
result = result.flatMap{ [weak self] in
self?.sendRequest(argument: item) ?? Observable.empty()
}
}
它似乎有效,但显然只有在所有网络请求完成后,结果才会发出下一个元素。
我需要的是顺序发送请求,结果可观察,一旦每个请求完成,就会发出下一个事件。
有什么建议吗?
【问题讨论】:
标签: ios iphone swift observable rx-swift