使用RxSwift执行 *** 作的顺序

使用RxSwift执行 *** 作的顺序,第1张

概述我正在使用Rx Swift来完成我的代码.对于我目前的项目,我想将RxSwift的原则应用于来自LayerKit的一堆完成块: layerClient.connectWithCompletion { (success, error) -> () in if (!success) { // Error } else { layerClient.requestAut 我正在使用Rx Swift来完成我的代码.对于我目前的项目,我想将RxSwift的原则应用于来自LayerKit的一堆完成块:

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执行 *** 作的顺序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1008592.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存