我有一种情况,我想验证表单,然后如果一切正常,请转到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)) }
我正在对您未显示的代码进行一些假设。您的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)) }