【发布时间】:2019-07-30 21:30:52
【问题描述】:
我将一些遗留的完成块代码包装在一个 Observable 中。它将发出一个事件(下一个或错误),然后完成。问题是调用onNext(), onCompleted() 只会将完成的事件发送给观察者。为什么next 事件没有送达?
更新:人员流实际上按预期工作。问题出现在下一个流中,filteredPeople。内部完成的事件被传递给它,我只是返回它,这会终止流。
我需要从内部流中过滤掉completed 事件。
let people = Observable<Event<[Person]>>()
.flatMapLatest {
return fetchPeople().asObservable().materialize()
}
.share()
// this is bound to a search field
let filterText = PublishSubject<String>()
let filteredPeople = Observable.combineLatest(people, filterText) { peopleEvent, filter in
// this is the problem. the completed event from people is being returned, and it terminates the stream
guard let people = peopleEvent.element else { return peopleEvent }
if filterText.isEmpty { return .next(people) }
return .next(people.filter { ... })
}
func fetchPeople() -> Single<[Person]> {
return Single<[Person]>.create { observer in
PeopleService.fetch { result in
switch result {
case .success(let people):
observer(.success(people))
case .failure(let error):
observer(.error(error))
}
}
return Disposables.create()
}
}
filteredPeople.subscribe(
onNext: { event in
// ?! doesn't get called
},
onCompleted: {
// we get here, but why?
},
onError: {event in
...
}).disposed(by: disposeBag)
【问题讨论】:
-
也许如果您发布了我们可以帮助您的实际代码。
-
你说得对,我撒了谎。 :) 问题出在下一个流中,filteredPeople。我需要从内部流中过滤掉已完成的事件......让它们成为驱动程序?
标签: rx-swift