gpt4 book ai didi

ios - 我如何告诉 RxSwift 做某事,无论成功或失败

转载 作者:行者123 更新时间:2023-11-29 05:57:06 25 4
gpt4 key购买 nike

我在一个类上有一个调用服务的方法,它使用该服务的响应将 ID 传递到另一个服务中,从而进行第二次调用。

如果其中任何一个失败或者当序列完成时,我想调用另一个函数self.showHomeScene()

   private func getPropsForHomeScene() {

profileService.fetchCurrentUser()
.map { $0.company }
.flatMap(companyService.fetchCompany)
.distinctUntilChanged()
.subscribe(onNext: { company in
self.showHomeScene()
}, onError: { err in
print(err.localizedDescription)
}).disposed(by: disposeBag)
}

目前我在订阅 block 中执行此操作,但是在发生错误时不会调用它。在前 2 个操作之后调用此操作非常重要。

最佳答案

对于这个问题和类似的问题,您需要概述执行此输出的所有原因,并将它们输入到相关流中。

您希望在第一次调用失败或第二次调用发出停止事件时调用 showHomeScene() 方法。

private func getPropsForHomeScene() {
let currentUser = profileService.fetchCurrentUser()
.share(replay: 1)

let company = currentUser
.map { $0.company }
.flatMap { companyService.fetchCompany($0) }

let currentUserFailed = currentUser
.materialize()
.map { $0.error }
.filter { $0 != nil }
.map { _ in }

let companyStopped = company
.materialize()
.filter { $0.isStopEvent }
.map { _ in }

Observable.merge(currentUserFailed, companyStopped)
.subscribe(onNext: {
self.showHomeScene()
})
.disposed(by: disposeBag)
}

我注意到您没有对获取的实际公司或当前用户对象执行任何操作。当然,这不会影响 subscribe,但我希望您也希望订阅 currentUsercompany 来对它们执行某些操作。在这种情况下,您应该将 share 放在公司流上,就像它已经在 currentUser 流上一样。

关于ios - 我如何告诉 RxSwift 做某事,无论成功或失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55052135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com