我从一个简单的函数返回一个Completable。 这不是异步调用,所以我只需要根据条件返回一个成功的完成或错误(在这里使用Rx,这样我可以绑定到其他Rx用法):
func exampleFunc() -> Completable {
if successful {
return Completable.just() // What to do here???
} else {
return Completable.error(SomeErrorType.someError)
}
}
错误案例非常容易,但是我对如何返回成功的完成表(不需要.create()
它)有一个阻止。
我在想我只需要使用Completable' .just()
或.never()
,但just
需要参数,而never
不需要似乎触发了完成事件。
答案 0 :(得分:11)
.empty()
是我正在寻找的运营商!
事实证明,我把.never()
和.empty()
的实现混淆了!
.never()
不会发出任何内容,不会终止.empty()
不会发出任何内容,但会正常终止因此,上面的示例代码的工作原理如下:
func exampleFunc() -> Completable {
if successful {
return Completable.empty()
} else {
return Completable.error(SomeErrorType.someError)
}
}
这是空/ throw / never运算符的documentation。
答案 1 :(得分:0)
我更倾向于做以下事情:
func example() throws {
// do something
if !successful {
throw SomeErrorType.someError
}
}
然后,为了将其与其他Rx代码联系起来,我只需使用map
,如下所示:
myObservable.map { try example() }
但是,在Completable上的映射不起作用,因为map的闭包仅在下一个事件上被调用。 : - (
由于这个原因,我倾向于避免使用Completable,它似乎与其他可观察者不一致。我更喜欢使用Observable<Void>
并在完成之前发送一个空事件......
这样的事情:
let chain = Observable<Void>.just()
let foo = chain.map { try example() }
foo.subscribe { event in print(event) }