编辑(3月5日)
我重温了这个答案,因为我不确定当我写下面的代码示例时,我的大脑在做什么。我会做这样的事情:
func getMaterialInfo(materialNo: String) -> Observable<[String: Material]> {
// ...
}
func getMaterialInfo(materialNumbers:[String]) -> Observable<[String: Material]>{
let allObservables = materialNumbers
.map { getMaterialInfo(materialNo: $0) }
return Observable.merge(allObservables)
}
原始答案
从你的代码中,我解释说
getMaterialInfo
同时进行调用。基于此,我会重写你的
getMaterialInfo(:[_])
方法来使用
.merge
操作员。
func getMaterialInfo(materialNo:[String]) -> Observable<[String: Material]>{
return Observable.create({ (observable) -> Disposable in
// a collection of observables that we haven't yet subscribed to
let allObservables = materialNo
.map { getMaterialInfo(materialNo: $0) }
return Observable.merge(allObservables)
}
return Disposables.create()
}
注意使用
merge
同时订阅所有可观察到的,同时触发100个网络请求。对于顺序订阅,请使用
concat
取而代之的是!