下面是我的代码。我需要多次调用api,直到网络信号打开。
buttonAction.do(onNext: { [weak self] in
self?.activity.startAnimating()
apiManager.callApi()
.do(onNext: { [weak self] in
self?.activity.stopAnimating()
},onError: { [weak self ] error in
if let error = error as? NoNetwork {
self?.activity.stopAnimating(errorInfo:error,presentationStyle:.alert)
// here alert will be appear. On click ok button, need to trigger the API() again
}
})
.subscribe().disposed(by:bag)
发布于 2021-08-04 12:09:00
请注意,您没有说明您希望如何处理任何其他类型的错误,因此下面的代码只是忽略它们……如果要显示所有错误的警报,请删除filter
。
let error = PublishSubject<Error>()
let retry = error
.filter { $0 is NoNetwork }
.map { $0.localizedDescription }
.flatMapFirst(presentScene(animated: true, scene: { message in
UIAlertController(title: "Error", message: message, preferredStyle: .alert)
.scene { $0.connectOK() }
}))
.share()
Observable.merge(buttonAction, retry)
.subscribe(onNext: { [activity] in
activity.startAnimating()
})
.disposed(by: bag)
Observable.merge(buttonAction, retry)
.flatMapFirst {
apiManager.callApi()
.catch { error.onNext($0); return .just(()) }
}
.subscribe(onNext: { [activity] in
activity.stopAnimating()
})
.disposed(by: bag)
presentScene
函数来自我的CLE library。在这段代码中,activity
是一个标准的UIActivityIndicatorView
,而不是您正在使用的任何东西。
https://stackoverflow.com/questions/68649382
复制相似问题