RxSwift表单验证和在一个流中发送请求

问题描述 投票:0回答:1

我有一种情况,我想验证表单,然后如果一切正常,请转到api请求。

我已经编写了一些代码,它可以正常工作,但是错误处理了我的流。我知道我可以在平面图的末尾添加.catch错误,但随后将执行下一个平面图。

我可以不处理而在流的末尾添加catch错误吗?还是处理它的唯一方法是将其分为两个流验证和服务器响应?

        enum Response {
            case error(message: String)
            case success
        }

        let start = input.validate
            .withLatestFrom(input.textFields)
            .flatMap { [unowned self] fields -> Observable<String> in
                return self.validate(characters: fields)
            }
        .flatMapLatest { [unowned self] _ -> Observable<String> in
            return self.apiClient.rxSendData()
                .retry(1)
        }
        .map { _ in return Response.success }
        .asDriver { Driver.just(Response.error(message: $0.localizedDescription)) }
rx-swift
1个回答
0
投票

我正在对您未显示的代码进行一些假设。您的validate功能对我来说尤其奇怪。看起来它发出一个String(如果验证成功,则将其忽略;如果验证失败,则不发出任何内容(或可能是错误)?

let start = input.validate
    .withLatestFrom(input.textFields)
    .flatMapLatest { [unowned self] fields -> Observable<String> in
        return self.validate(characters: fields)
            .catchError { _ in Observable.empty() }
    }
    .flatMapLatest { [unowned self] _ -> Observable<Response> in
        return self.apiClient.rxSendData()
            .retry(1)
            .map { _ in Response.success }
            .catchError { error in Observable.just(Response.error(message: error.localizedDescription)) }
    }
    .asDriver { Driver.just(Response.error(message: $0.localizedDescription)) }
© www.soinside.com 2019 - 2024. All rights reserved.