RxSwift 取消 RxMoya 网络请求

Posted

技术标签:

【中文标题】RxSwift 取消 RxMoya 网络请求【英文标题】:RxSwift Canceling RxMoya networking request 【发布时间】:2019-05-06 12:19:15 【问题描述】:

我正在为搜索字段使用 MoyaRx 网络,并希望在该字段为空时取消请求。

let response = request
    .flatMapLatest 
        provider.rx.request($0)
        .map(T.self)
        .asDriver(onErrorRecover:  error in
            return Driver.just(.error(error))
        )
    

但是 Moya 手册没有我的目的的代码。你能提出一些建议吗?

【问题讨论】:

【参考方案1】:

以下是您要查找的内容:

let response = request
    .flatMapLatest 
        $0.isEmpty ? Driver.empty() :
        provider.rx.request($0)
            .map(T.self)
            .asDriver(onErrorRecover:  error in
                return Driver.just(.error(error))
            )

请注意,我添加了一行。我假设$0 是字符串类型。

如果字符串为空,flatMapLatest 将取消任何正在进行的请求并发出completed 事件,而不是发出请求。这不会完成链,因为request 也必须在链完成之前完成,但它会设置 flatMapLatest 以接受另一个事件。

【讨论】:

以上是关于RxSwift 取消 RxMoya 网络请求的主要内容,如果未能解决你的问题,请参考以下文章

使用 RxMoya 在 RxSwift 上未获得 Completed 事件

RxSwift - 使用 maxCount 重试网络请求直到成功

使用 RxSwift 在网络请求后更新 SwiftUI 列表

如何使用 RxSwift 取消之前的请求

如何正确过滤 RxMoya 中的SuccessfulStatusCodes

ReactiveCocoa / RxSwift 笔记一