Dan*_* T. 5 reactive-programming swift rx-swift
我仍然是一个反应新手,我正在寻求帮助.
func doA() -> Observable<Void>
func doB() -> Observable<Void>
enum Result {
case Success
case BFailed
}
func doIt() -> Observable<Result> {
// start both doA and doB.
// If both complete then emit .Success and complete
// If doA completes, but doB errors emit .BFailed and complete
// If both error then error
}
Run Code Online (Sandbox Code Playgroud)
以上是我认为我想要的...初始函数doA()和doB()包装网络调用,因此它们将发出一个信号然后Complete(或Error不发出任何Next事件.)如果doA()完成但是doB()错误,我想doIt()发射.BFailed然后完成.
感觉就像我应该使用zip或者combineLatest我不知道如果我这样做,如何知道哪个序列失败了.我也很确定这catchError是解决方案的一部分,但我不确定究竟应该放在哪里.
-
正如我在想的那样,我对顺序发生的呼叫感到满意.那甚至可能更好......
IE:
Start doA()
if it completes start doB()
if it completes emit .Success
else emit .BFailed.
else forward the error.
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我已经学好了 RxSwift 现在可以回答这个问题了......
func doIt() -> Observable<Result> {
Observable.zip(
doA().map { Result.Success },
doB().map { Result.Success }
.catch { _ in Observable.just(Result.BFailed) }
) { $1 }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |