gpt4 book ai didi

ios - RxMoya 网络和服务错误处理在同一函数中

转载 作者:行者123 更新时间:2023-11-28 23:47:19 27 4
gpt4 key购买 nike

我正在尝试实现一个处理网络和 API 错误的函数,我的问题是如何在 filterSuccessfulStatusCodes() 之后再次发出一个 observable。我遇到的主要问题是,在第一次订阅后,我不确定这种方法是否正确。

我在这段代码中遇到的当前错误是:调用中的额外参数“onError”

func Request<T: Decodable>(_ request: APIManager) -> 
Observable<Result<T>> {
provider.rx
.request(request)
.subscribe(onSuccess: { (response) in
try response.filterSuccessfulStatusCodes()
return Observable.just(response)
.subscribe { event in
switch event {
case .success:
.map(RequestResponse<T>.self)
.map { $0.result! }
.asObservable()
.map(Result.success)
.catchError { error in
return .just(.error(withMessage: "Error \(error)"))
}
case .error:
print("error")
}
}

}, onError: { (error) in
print("network request error")

}, onCompleted: {
print("network request on completed")
}).disposed(by: disposeBag)
}

struct RequestResponse<T: Decodable> {
let statusCode: Int
let statusMessage: String
let success: Bool
let result: T?
let errorBag: String?
}

enum Result<T: Decodable> {
case success(T)
case error(withMessage: String)
}

最佳答案

您可以尝试类似的方法,将 Single 转换为 Observable,然后调用 filterSuccessfulStatusAndRedirectCodes 并且您可以处理 catchError< 中的错误 关闭

func Request<T: Decodable>(_ request: APIManager) -> Observable<Result<T>> {
self.sharedProvider.rx
.request(request)
.asObservable()
.filterSuccessfulStatusAndRedirectCodes()
.map(RequestResponse<T>.self)
.map { Result.success }
.catchError { error in
if let moyaError = error as? MoyaError {
return Objservable.error(handleNetworkError(withMoyaError: moyaError))
} else {
return Observable.error(error)
}
}
}

关于ios - RxMoya 网络和服务错误处理在同一函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52464332/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com