gpt4 book ai didi

swift - RxMoya中如何正确过滤SuccessfulStatusCodes

转载 作者:行者123 更新时间:2023-11-28 16:06:50 24 4
gpt4 key购买 nike

我正在使用 RxMoya,我想知道 fiterSuccesfulStatusCodes 的用法,我会尝试描述我的问题是什么......所以当你像这样使用一些网络调用时

func getAllApps(gwId: Int) -> Observable<Response> {
return provider.request(RestAPI.GetAllApps(gwId: gwId)).filterSuccessfulStatusCodes()
}

当您收到状态代码高于 299 的响应时,什么也不会发生,我的问题是我想向用户显示错误消息,但是当您检查 filterSuccessfulStatusCodes 的作用时:

public func filterSuccessfulStatusCodes() -> Observable<E> {
return flatMap { response -> Observable<E> in
return Observable.just(try response.filterSuccessfulStatusCodes())
}
}

现在我们离我遇到的问题越来越近了。所以 filterSuccessfulStatusCodes 的实现使用 Moya.Resposne 的公共(public)实例函数和这个实现:

public func filterSuccessfulStatusCodes() throws -> Response {
return try filterStatusCodes(200...299)
}

如你所见,这个东西抛出异常...但是上面的函数,它没有重新抛出,它返回泛型 E 的 Observable。

我的第一个问题,当函数不抛出/重新抛出时,你怎么可以使用 return Observable.just(try response.filterSuccessfulStatusCodes())。你可以使用 try withou do/chatch 吗?(我知道 try!

第二个问题,是否有一种在可观察级别上对错误状态代码使用react的方法。

谢谢

最佳答案

  • try response.filterSuccessfulStatusCodes() 不是在 filterSuccessfulStatusCodes() 的范围内使用,而是在 flatMap 中使用。

    如果我们看一下 Observable 上的 flatMap 的定义,我们会得到

    func flatMap<O: ObservableConvertibleType>(_ selector: @escaping (E) throws -> O)
    -> Observable<O.E>

    selector 这里抛出,所以我们可以使用try

  • 当在可观察链中抛出某些东西时,可观察链将以错误结束。因此,您将能够在订阅调用的 onError 选择器中对不成功的状态代码使用react(或使用 catchretry 和其他处理错误的运算符)。

    getAllApps(gwId: Int)
    .subscribe(onNext: {
    debugPrint("Success with \($0)")
    }, onError: { error in
    switch error {
    case Moya.Error.statusCode(let response):
    debugPrint("Invalid status code \(response.statusCode)")
    default:
    debugPrint("An error occured: \(error)")
    }
    })

关于swift - RxMoya中如何正确过滤SuccessfulStatusCodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40175821/

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