【发布时间】:2016-10-21 11:42:47
【问题描述】:
我正在使用 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 func filterSuccessfulStatusCodes() throws -> Response {
return try filterStatusCodes(200...299)
}
如你所见,这个东西会抛出异常……但是上面的函数,它并没有重新抛出,它返回的是泛型E的Observable。
我的第一个问题,当函数不抛出/重新抛出时,你为什么可以使用 return Observable.just(try response.filterSuccessfulStatusCodes())。你可以使用 try 而没有 do/chatch?(我知道用 try!/try?你可以但用 try,我只能想象 rethrow 的情况)。
第二个问题,有一种方法可以在可观察的级别上对错误状态代码做出反应。
谢谢
【问题讨论】: