相关疑难解决方法(0)

iOS RxSwift如何防止序列被处置(抛出错误)?

我有一个由多个运算符组成的序列。在此序列处理过程中,总共有7个地方可能会产生错误。我遇到了一个问题,即该序列的行为不符合我的预期,我正在寻找一种解决该问题的优雅方法:

let inputRelay = PublishRelay<Int>()
let outputRelay = PublishRelay<Result<Int>>()

inputRelay
.map{ /*may throw multiple errors*/}
.flatmap{ /*may throw error*/ }
.map{}
.filter{}
.map{ _ -> Result<Int> in ...}
.catchError{}
.bind(to: outputRelay)
Run Code Online (Sandbox Code Playgroud)

我以为那只catchError会捕获错误,允许我将其转换为失败结果,但可以防止释放该序列。但是,我看到第一次发现错误时,将重新分配整个序列,并且不再发生任何事件。

如果没有这种行为,那么到处都会留下一个丑陋的Results <>,并且不得不多次分支我的序列以将其定向Result.failure(Error)到输出。存在不可恢复的错误,因此retry(n)不是一种选择:

let firstOp = inputRelay
.map{ /*may throw multiple errors*/}
.share()

//--Handle first error results--
firstOp
.filter{/*errorResults only*/}
.bind(to: outputRelay)

let secondOp = firstOp
.flatmap{ /*may throw error*/ }
.share()

//--Handle second error results--
secondOp
.filter{/*errorResults only*/}
.bind(to: outputRelay)

secondOp
.map{} …
Run Code Online (Sandbox Code Playgroud)

error-handling onerror observable ios rx-swift

2
推荐指数
2
解决办法
2047
查看次数

标签 统计

error-handling ×1

ios ×1

observable ×1

onerror ×1

rx-swift ×1