Comletable.create{} 的 RxJava 可完成行为

RxJava Completable behavior of Comletable.create{}

我们在进行代码审查时发现了这段代码:

fun saveId(id: Int): Completable {
    return Completable.defer {
        preferencesHelper.saveId(id)
        Completable.complete()
    }
}

我的同事认为应该改为:

fun saveId(id: Int): Completable {
    return Completable.defer {
        Completable.create { emitter ->
            try {
                preferencesHelper.saveId(id)
                emitter.onComplete()
            } catch (t: Throwable) {
                emitter.onError(t)
            }
        }
    }
} 

我们需要帮助清除这两个方法在异步执行方面是否相同?

它们实际上是相同的,但不必要地冗长。可以使用 fromAction

来简化它们
fun saveId(id: Int): Completable {
    return Completable.fromAction {
        preferencesHelper.saveId(id)
    }
}