RxSwift取消RxMoya网络请求

时间:2019-05-06 12:19:15

标签: swift networking request rx-swift moya

我正在将MoyaRx网络用于搜索字段,并且想在该字段为空时取消请求。

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

但是Moya手册没有用于我目的的代码。你能建议点什么吗?

1 个答案:

答案 0 :(得分:0)

以下是您要寻找的内容:

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的类型为String。

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