0

私は 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()) を使用できるのはなぜですか。do/chatch? なしで try を使用できます (try!/try? を使用できることはわかっていますが、try を使用すると、rethrow を使用する場合しか想像できません)。

2 番目の質問です。オブザーバブルのレベルで、エラー ステータス コードに対応する方法があります。

ありがとうございました

4

1 に答える 1