layerClIEnt.connectWithCompletion { (success,error) -> () in if (!success) { // Error } else { layerClIEnt.requestAuthenticationNonceWithCompletion { (nonce,error) -> () in // Even more blocks } }}
我在考虑这样的事情:
// In extensionpublic 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 AppDelegateself.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运算符时要小心,此运算符将在恢复后终止序列,之后将忽略任何额外事件.
总结以上是内存溢出为你收集整理的使用RxSwift执行 *** 作的顺序全部内容,希望文章能够帮你解决使用RxSwift执行 *** 作的顺序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)