RxSwift Chaining:在 Rxswift 中写这个的更好方法是什么?
RxSwift Chaining: What is a better way of writing this in Rxswift?
我是 RxSwift 的新手。很新。通常要在没有 Rx 的情况下链接你,你将下一个函数放在一个完成闭包中。我的同事告诉我改用 flatmap 或我们的 concatmap 版本,但从未给我一个例子。任何人都可以用 flatmap 或 swift 版本的 concatmap 转换这段代码吗?同样,我很新,所以请对判断保持温和。
SVProgressHUD.show()
params.address = address
print(params)
viewmodel
.postSeekerAvatar(image: image).subscribe(onSuccess: {
// SVProgressHUD.dismiss()
// SVProgressHUD.show()
self.viewmodel
.updateSeeker(withFirstName: params.firstName, lastName: params.lastName, isBusiness: params.isBusiness, abn: "none", address: params.address)
.subscribe(onSuccess: {
SVProgressHUD.dismiss()
self.performSegue(withIdentifier: SegueConstants.toProfileForm, sender: self)
}) { (error) in
SVProgressHUD.showDismissableError(with: error.message)
}.disposed(by: self.disposeBag)
}) { (error) in
SVProgressHUD.showDismissableInfo(with: error.message)
}.disposed(by: disposeBag)
postSeekerAvatar() method should return a Single response
Add showLoader/hideLoader method in BaseViewController.
viewmodel
.postSeekerAvatar(image: image) //Return Single<Response>
.do(onSubscribed: presenter.showLoader)
.do(onDispose: presenter.hideLoader)
.asCompletable()
.andThen(update(params: params))
.subscribe()
.disposeOnDeactivate(interactor: self)
//Returns a completable
private func update(params: Model) -> Completable {
viewmodel
.updateSeeker(
withFirstName: params.firstName,
lastName: params.lastName,
isBusiness: params.isBusiness,
abn: "none",
address: params.address
)
return Completable.empty()
}
所以,您想要的是永远不会有嵌套的 subscribe
调用。相反,您将转换源可观察值,有时转换为另一个值,有时转换为另一个可观察值。
SVProgressHUD.show()
params.address = address
print(params)
viewmodel
.postSeekerAvatar(image: image)
.flatMap {
self.viewmodel
.updateSeeker(withFirstName: params.firstName, lastName: params.lastName, isBusiness: params.isBusiness, abn: "none", address: params.address)
}
.subscribe(onSuccess: {
SVProgressHUD.dismiss()
self.performSegue(withIdentifier: SegueConstants.toProfileForm, sender: self)
}, onError: { (error) in
SVProgressHUD.showDismissableError(with: error.message)
})
.disposed(by: disposeBag)
所以这里先订阅postSeekerAvatar
,每推一个值,也会订阅updateSeeker
。如果其中任何一个出错,错误关闭将 运行.
我是 RxSwift 的新手。很新。通常要在没有 Rx 的情况下链接你,你将下一个函数放在一个完成闭包中。我的同事告诉我改用 flatmap 或我们的 concatmap 版本,但从未给我一个例子。任何人都可以用 flatmap 或 swift 版本的 concatmap 转换这段代码吗?同样,我很新,所以请对判断保持温和。
SVProgressHUD.show()
params.address = address
print(params)
viewmodel
.postSeekerAvatar(image: image).subscribe(onSuccess: {
// SVProgressHUD.dismiss()
// SVProgressHUD.show()
self.viewmodel
.updateSeeker(withFirstName: params.firstName, lastName: params.lastName, isBusiness: params.isBusiness, abn: "none", address: params.address)
.subscribe(onSuccess: {
SVProgressHUD.dismiss()
self.performSegue(withIdentifier: SegueConstants.toProfileForm, sender: self)
}) { (error) in
SVProgressHUD.showDismissableError(with: error.message)
}.disposed(by: self.disposeBag)
}) { (error) in
SVProgressHUD.showDismissableInfo(with: error.message)
}.disposed(by: disposeBag)
postSeekerAvatar() method should return a Single response
Add showLoader/hideLoader method in BaseViewController.
viewmodel
.postSeekerAvatar(image: image) //Return Single<Response>
.do(onSubscribed: presenter.showLoader)
.do(onDispose: presenter.hideLoader)
.asCompletable()
.andThen(update(params: params))
.subscribe()
.disposeOnDeactivate(interactor: self)
//Returns a completable
private func update(params: Model) -> Completable {
viewmodel
.updateSeeker(
withFirstName: params.firstName,
lastName: params.lastName,
isBusiness: params.isBusiness,
abn: "none",
address: params.address
)
return Completable.empty()
}
所以,您想要的是永远不会有嵌套的 subscribe
调用。相反,您将转换源可观察值,有时转换为另一个值,有时转换为另一个可观察值。
SVProgressHUD.show()
params.address = address
print(params)
viewmodel
.postSeekerAvatar(image: image)
.flatMap {
self.viewmodel
.updateSeeker(withFirstName: params.firstName, lastName: params.lastName, isBusiness: params.isBusiness, abn: "none", address: params.address)
}
.subscribe(onSuccess: {
SVProgressHUD.dismiss()
self.performSegue(withIdentifier: SegueConstants.toProfileForm, sender: self)
}, onError: { (error) in
SVProgressHUD.showDismissableError(with: error.message)
})
.disposed(by: disposeBag)
所以这里先订阅postSeekerAvatar
,每推一个值,也会订阅updateSeeker
。如果其中任何一个出错,错误关闭将 运行.