【问题标题】:Skipping error value from combineLatest Observables从 combineLatest Observables 中跳过错误值
【发布时间】:2021-03-09 12:17:25
【问题描述】:

我正在组合一些 Observable,我想跳过返回错误的任何人,以便 Observable 可以完全运行

let observable = Observable.combineLatest(
            remoteRepository.getxx1(),
            remoteRepository.getxx2(),
            remoteRepository.getxx3()
        ) { [weak self] xx1, xx2, xx3 in

            guard let self = self else { return }

        }

        runObservable(observable: observable)

getxx3() 给出错误,因此该过程未完成。如果出现错误,我该如何继续

【问题讨论】:

    标签: swift rx-swift


    【解决方案1】:

    如果您对错误是什么根本不感兴趣,那么您可以捕获错误并在每个子可观察对象上发出完成的事件。像这样:

    Observable.combineLatest(
        remoteRepository.getxx1().catch { _ in .empty() },
        remoteRepository.getxx2().catch { _ in .empty() },
        remoteRepository.getxx3().catch { _ in .empty() }
    )
    

    使用上述方法,如果任何 getter 发出错误,catch 运算符将捕获它,empty() 运算符将发出一个已完成的事件。这将允许其他 observables 完成他们的工作并完成。

    【讨论】:

    • observable 上没有 .catch 是 .catchError
    • 如果您使用的是 RxSwift 5,那么它将改为 catchError
    • getxx2 仍会阻止 getxx3 运行,因此该操作仍未完成。
    • 你必须展示你的代码,因为我上面发布的内容并没有这样做。
    猜你喜欢
    • 2019-03-03
    • 2022-01-19
    • 2020-01-23
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多