首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RxSwift断网后再次触发接口

RxSwift断网后再次触发接口
EN

Stack Overflow用户
提问于 2021-08-04 10:10:49
回答 1查看 30关注 0票数 1

下面是我的代码。我需要多次调用api,直到网络信号打开。

代码语言:javascript
运行
复制
 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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-04 12:09:00

请注意,您没有说明您希望如何处理任何其他类型的错误,因此下面的代码只是忽略它们……如果要显示所有错误的警报,请删除filter

代码语言:javascript
运行
复制
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,而不是您正在使用的任何东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68649382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档