RxSwift 在 for 循环中对同一个 Observable 的多个订阅
RxSwift Multiple subscriptions to same Observable in for-loop
我需要在 for 循环中多次执行一个任务。任务本身 returns Observable<Void>
。我觉得我可能会 运行 继续订阅会出现一些意想不到的错误。 在for-loop
订阅n次可以吗?
private func removeItem(from locations: Resource...) {
for resource in locations {
RemoveItemTask(id: item.value.id, resource: resource)
.execute(in: self.dispatcher)
.subscribe { event in
if let error = event.error {
self.error = Observable.of(error)
}
}.addDisposableTo(self.disposeBag)
}
}
为什么要使用 for 循环? RxSwift
有很多有趣的解决方案可供您使用。
所以你有一些任务,你可以 map
它们进入一个可观察数组而不调用 subscribe
:
let observables: [Observable<Void>] = locations.map({ ... })
然后处理所有的错误:
Observable
.merge(observables.map({ [=11=].materialize() }))
.flatMap({ Observable.from(optional: [=11=].error) })
.subscribe(onNext: { (error) in
// Handle error
})
.disposed(by: disposeBag)
我需要在 for 循环中多次执行一个任务。任务本身 returns Observable<Void>
。我觉得我可能会 运行 继续订阅会出现一些意想不到的错误。 在for-loop
订阅n次可以吗?
private func removeItem(from locations: Resource...) {
for resource in locations {
RemoveItemTask(id: item.value.id, resource: resource)
.execute(in: self.dispatcher)
.subscribe { event in
if let error = event.error {
self.error = Observable.of(error)
}
}.addDisposableTo(self.disposeBag)
}
}
为什么要使用 for 循环? RxSwift
有很多有趣的解决方案可供您使用。
所以你有一些任务,你可以 map
它们进入一个可观察数组而不调用 subscribe
:
let observables: [Observable<Void>] = locations.map({ ... })
然后处理所有的错误:
Observable
.merge(observables.map({ [=11=].materialize() }))
.flatMap({ Observable.from(optional: [=11=].error) })
.subscribe(onNext: { (error) in
// Handle error
})
.disposed(by: disposeBag)