使用RxSwift执行操作的顺序
发布时间:2020-12-14 04:45:43 所属栏目:百科 来源:网络整理
导读:我正在使用Rx Swift来完成我的代码.对于我目前的项目,我想将RxSwift的原则应用于来自LayerKit的一堆完成块: layerClient.connectWithCompletion { (success,error) - () in if (!success) { // Error } else { layerClient.requestAuthenticationNonceWithC
我正在使用Rx
Swift来完成我的代码.对于我目前的项目,我想将RxSwift的原则应用于来自LayerKit的一堆完成块:
layerClient.connectWithCompletion { (success,error) -> () in if (!success) { // Error } else { layerClient.requestAuthenticationNonceWithCompletion { (nonce,error) -> () in // Even more blocks } } } 我在考虑这样的事情: // In extension public func rx_connect() -> Observable<Bool> { return create { observer in self.connectWithCompletion { (success,error) -> ()in if (success) { observer.on(.Next(success)) observer.on(.Completed) } else { observer.on(.Error(error)) } } return NopDisposable.instance } } public func rx_requestAuthenticationNonce() -> Observable<String> { // Same for annother method } // In AppDelegate self.layerClient.rx_connect() .then() // requestAuthenticationNonceWithCompletion and use the nonce for next action .then() .subscribeNext(… .onError(… // To catch all errors RxSwift没有then()方法.有没有其他方法来做这个链接的东西或我在如何使用ReactiveX一般错误? 解决方法
是的,RxSwift没有then运算符,因为名称风险很大.
那么Reactive Extensions世界中的很多东西都可以是flatMap,甚至是switchLatest,具体取决于上下文. 在这种情况下,我建议使用flatMap,因为将使用map返回一个Observable of Observables,在大多数情况下很难组合和管理.所以我会这样做: self.layerClient.rx_connect() .flatMap(){ _ in return rx_requestAuthenticationNonce() .catchError(displayError) } .subscribeNext(… .onError(… // To catch all errors 在这种情况下,我会使用flatMap而不是map,因为在rx_requestAuthenticationNonce()失败的情况下,我能够在不终止序列的情况下捕获错误. 使用catchError运算符时要小心,此运算符将在恢复后终止序列,之后将忽略任何额外事件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在闭包中使用数组时Swift EXC_BAD_ACCESS
- oracle表中列的类型。number和integer区别
- React Native:真机断点调试+跨域资源加载出错问题解决
- 不可重入C#计时器
- 新建flex Library Project项目错误 Nothing Was Specified
- 保留从Ruby中的文件加载YAML的密钥顺序
- You must supply a layout_width layout_width attribute 解
- Oracle Linux And Oracle Database 11g R2 Intsallation
- C#CLR /编译问题
- cocos2d:CCScale9Sprite char bubble