问题描述
给定一组 url,有没有办法同时运行它们?但是以这种方式,一旦有一个成功,就会使用该成功的 url 移动到下一个请求。
到目前为止,我尝试链接 concatMap
,但以 zip
失败。
func updateAccountInfo() -> Single<Bool> {
var disposable: Disposable? = nil
return Single<Bool>.create { observer in
do {
var urls = try self.settings.domains.value()
disposable = Observable.from(urls)
.enumerated()
.concatMap { index,url -> Single<URL> in
return self.verifyUrl(url)
}
.concatMap { url -> Single<Account> in
return self.apiManager.loadAccountInfo(from: url)
}
.observeOn(MainScheduler.instance)
.do(onNext: { (account: AccountInfo) in
// use account unfo here
disposable!.dispose()
})
.subscribe()
} catch {
observer(.error(error))
}
return Disposables.create()
}
}
也尝试过:
disposable = Observable.from(urls)
.enumerated()
.concatMap { index,url -> Single<(Bool,URL)> in
return self.verifyUrl(url)
}
.subscribe(onNext: { reachable,url in
if reachable {
self.apiManager.loadAccountInfo(from: url)
.subscribe(onSuccess: { accountInfo in
// use account info here
},onError: { error in
})
.disposed(by: self.bag)
disposable!.dispose()
} else {
}
},onError: { error in
},onCompleted: {
})
也许我使用了 zip,但我如何创建一个 verifyUrl(url)
调用数组? zip
是否完全接受 Observable
数组?
let obs = Observable.from(urls)
.enumerated()
.concatMap { index,url -> Single<URL> in
return self.verifyUrl(url)
}
let test = Observable
.zip(obs).map { [urls] in
return [urls]
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)