RxSwift отменяет сетевой запрос RxMoya

Я использую сеть MoyaRx для поля поиска и хочу отменить запрос, когда поле пусто.

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

Но в руководствах Moya нет кода для моей цели. Вы можете что-нибудь подсказать?


person Artem Krachulov    schedule 06.05.2019    source источник


Ответы (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 имеет тип String.

Если строка пуста, вместо запроса flatMapLatest отменит все текущие запросы и выдаст событие completed. Это не завершит цепочку, потому что request также должен завершиться до завершения цепочки, но он настроит flatMapLatest для принятия другого события.

person Daniel T.    schedule 06.05.2019