2017-11-02 7 views
0

에서 emited 이벤트를 필터링 flatMapFirst을 방지하기 위해 어떻게 코드를 더 적게 같은 있습니다 RxSwift는 - 가입자

let requestResult = someSubject 
    .flatMapFirst{ [weak self] _ -> Observable<ResponseClass> in 
     return self?.triggerNetworkRequest() ?? Observable.never() 
    }.share() 

requestResult.subscribe(onNext: { [weak self] response in 
    if someCondition { 
     self?.someSubject.onNext() 
    } 
}).addDisposableTo(disposeBag) 

그래서 나는 기본적으로 어떤 상황에서 네트워크 요청을 반복하는 새로운 onNext 이벤트를 방출하고있다.

문제는이 방법으로 이벤트를 방출하면 flatMapFrist에 의해 여전히 필터링됩니다. 포장하면

DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(10)) { 
    self.toggleLikeSubject.onNext() 
} 

이 작동합니다.

이 이벤트가 필터링되지 않도록하려면 어떻게해야합니까?

답변

0

AFAIK는 표준 용액은 다음과 같습니다 -

 let requests = PublishSubject<Observable<ResponseClass>>() 
     let requestResult: Observable<ResponseClass> = requests.switchLatest() 
     requests.onNext(triggerNetworkRequest()) // repeat whenever you need a fresh response 
     // subscribe to 'requestResult'